c언어 free 관련해서 질문이 있습니다.
글쓴이: bao / 작성시간: 수, 2018/11/07 - 9:00오전
구조체 B {
...
...
}
구조체 A {
....
char * buf
....
}
main ()
{
A a;
B *b = (구조체 *B)malloc(sizeof(구조체 B));
a.buf = (char *) b;
}
위에 처럼 B 구조체의 정보를 A구조체의 char *에 저장을 해놓으려고 합니다. (char * 로 한 이유는 사실 아무 데이터 형이든 상관이 없지만 여기 buf에 다른 여러가지 구조체 정보가 상황에 따라 올수가 있어 그냥 char *로 하였습니다.)
이런 상황에서 free를 할때
free(buf)를 해도 메모리 누수가 생기지 않는지 궁금합니다.
생긴다면 어떻게 해야 하는지와... 메모리 누수가 생기지 않는다면 왜 안생기는지가 궁금합니다..
Forums:
메모리 누수(memory leak)는 어떻게 발생하는가?
일단, 말씀하신 예제에서는 메모리 누수가 일어나지는 않습니다. 이미 b 포인터가 힙을 가리키고 있고, a.buf 만 free( ) 한다고 하더라도, main 함수에서 b 포인터의 존재가 명시되지 않았다면 모르겠지만, 명시되어 있는 상태에서는 (그리고 malloc을 호출한 상태에서는) 발생하지는 않을 겁니다. 커널에서 알고 있기 때문이지요.
원하시던 예제는 이런 예제가 아닐까 생각합니다.
https://en.wikipedia.org/wiki/Memory_leak#A_simple_example_in_C
댓글 달기