프로그래밍 구조체 공부중인데 원인을 찾을수없는 에러로 고민하다 여쭤봅니다.

글쓴이: 익명 사용자 / 작성시간: 토, 2019/06/08 - 7:15오후
#include<stdio.h> #include<stdlib.h> typedef struct Food{ char name[30]; int price; int cal; }food; int main(){ food *pt=malloc(sizeof(food)*3); int i; for(int i=0;i<3;i++){ printf("input %dth food name: ",i+1); scanf("%s",pt[i].name); printf("input price: "); scanf("%d",&pt[i].price); printf("input calorie: "); scanf("%d",&pt[i].cal); } for(int j=0;j<3;j++){ printf(" %s ",pt[i].name); } printf("\n"); for(int p=0;p<3;p++){ printf(" %d ",pt[i].price); } printf("\n"); for(int p=0;p<3;p++){ printf(" %d ",pt[i].cal); } printf("\n"); free(pt); }
위 코드가 제가 짜본 코드인데요, 도무지 이해 안되는 부분이 몇가지 있고 결정적으로 core dumped라는 에러가 나는데 이유를 모르겠습니다.
구조체 변수를 만들 때 포인터로 만들면 malloc으로 메모리 할당을 해줘야 하잖아요?
거기서 sizeof(struct)*n 으로 배정을 해서 n개 배열처럼 만들고 싶은데요
처음에 scanf에서 멤버 name의 값을 받을때 scanf("%s", (pt+i)->name)으로 썼거든요... 그런데 에러가 나더라구요
화살표를 아예 안쓰고 pt[i].name으로 하니까 이부분은 넘어가지던데 화살표를 쓰려면 어떻게 해야하는지 궁금해요
그 다음엔 i가 배정이 안되어있다고 또 에러가 뜨더라구요 분명 for문에서 i를 선언을 했는데도요.
그런데 아예 for문 밖에서 선언을 따로 해주니까 또 에러가 안나요;; 골때리는게 밑에 for문은 별 문제없이 넘어가지구요
마지막으로 실행을 하니까 실행이 되긴하는데 중간에 결과가 안나오고 segment error였나? core dumped 되었다고 하더라구요
이거 물어볼 사람도 없고 여기서 몇시간째 끙끙대다보니 돌아버릴 것 같습니다 ㅠㅠ 제발 알려주세요
Forums:
debug를 해 보세요. 처음 scanf()를 돌리고
debug를 해 보세요. 처음 scanf()를 돌리고 있는 for 루프를 라인 단위로 실행하다 보면 scanf() 후에 name, price, cal 등에 어떤 값이 들어가 있는지 확인해 보세요.
pt->name;
pt++;
pt->name;
pt++;
pt->name; 식으로 접근할 수 있습니다.
잘 돌아가는 프로그램과 그렇지 않은 프로그램은
잘 돌아가는 프로그램과 그렇지 않은 프로그램은 겉보기에 상당히 비슷할 수 있습니다.
경우에 따라서는 단 몇 글자 차이일 뿐이기도 합니다. 심지어는 단 한 글자 차이일 때도 있고요.
하지만 그 한 글자가 정말 엄청난 차이를 불러오지요. 그러니 프로그래밍을 할 때에는 키보드 키 하나라도 심혈을 기울여 누르도록 합시다.
댓글 달기