구조체 포인터 할당하는 함수 구현 ...
글쓴이: yerang0427 / 작성시간: 수, 2016/09/07 - 12:56오후
typedef struct unit{ char name[20]; } Unit; typedef struct factory{ char name[20]; Unit run[5]; int i; } Fac; typedef struct construct{ char name[20]; Fac *f; }Construct; void init(Fac *a,Fac b){ a = (Fac*) malloc(sizeof(Fac)); a = &b; } int main(void){ Fac fc = {"ff",{},0}; Unit mr = {"marine"}; Construct br = {"barrak",NULL}; init(br.f,fc); br.f->run[0] = mr; printf("%s", br.f->run[0].name); }
br.f = & fc 를 직접하면 문제 없는데 init 함수를 통해서 하면 자꾸 세그먼트 오류가 발생하네요 ㅠㅜ 도와주세요 ㅠㅠㅠ
Forums:
전형적인 지역변수오류+포인터오류네요.
전형적인 지역변수오류+포인터오류네요.
br구조체의 f멤버는 init() 호출 후에도 안 바뀝니다.
init()의 첫번째 인수로 f멤버를 넣었는데 이건 f멤버 주소가 아니라 아직 초기화되지 않은 f멤버의 값을 복사해서 넘기는거고 init()에서 수행하는 malloc()이 반환하는 주소는 init() 리턴후에는 f멤버에 들어가는게 아니라 없어집니다. 그래서 f멤버는 init()후에도 초기화되지 않은 그값 그대로고 이걸 주소로해서 쓸려니 세그폴트 떨어지는게 당연합니다.
Written By the Black Knight of Destruction
https://kldp.org/node/119844
https://kldp.org/node/119844
댓글 달기