구조체 메모리 해제를 하는데 질문..입니다.
글쓴이: hoterm / 작성시간: 월, 2007/07/09 - 1:08오전
struct data_str
{
int sub_id;
char sub_data[100];
};
struct member
{
int id;
char name[100];
struct data_str *sub;
};
int usr_remove(struct member *mem, struct data_str *data)
{
int ret=0, count=0;
while(mem[count].id)
{
free(&(mem+count)->id);
free((mem+count)->name);
free((mem+count)->sub);
free(mem+count);
}
return ret;
}
}}}
세그먼테이션 폴트 발생합니다.
물론 첫 free 영역에서요.
그리고 아래와 같이 작성을 해도 마찬가지 폴트가 발생하는데
어찌 해제를 해줘야 하는지..
================================
free(mem[count].name);
free(mem[count].sub);
free(mem[count]);
어찌 해야 하는지...
해답을 알려주시면 감사하겠습니다.
그럼..
그리고 중첩 구조체의 메모리 해제를 하는데.
위와 같이 최하위 해당 구조체의 멤버를 지운다고 알고 있는데.
예를 알려주시면 감사하겠습니다.
Forums:
free()는 malloc()으로
free()는 malloc()으로 할당한 영역을 해제하는 함수입니다.
설마 id 멤버나 name 멤버는 malloc()으로 할당한 영역이 아니므로
free()하면 안됩니다.
int a = 1;
이렇게 하고 쓰다가
free(&a);
이렇게 하진 않잖아요 ^^
그냥....
free(mem[count]); 하시면 됩니다.
자세한 내용을 알고 싶으시면 C언어 책의 포인터 부분을 좀 더 깊이 공부허세용~
---------------------------------------------------------------
폐인이 되자 (/ㅂ/)
from amateur 두분께
from amateur
두분께 감사..
구조체 메모리 해제할 때 주의 사항.
============================
멤버를 배열로 지정했는가?
malloc 하여 포인트 넘겨줄 때 sizeof(type)*n 을 하지 않았나?
두번 실수는 말자..
from amateur
댓글 달기