char
* read_buffer(
FILE
*file,
const
int
size)
{
int
foo = 0;
char
* buf = (
char
*)
malloc
(size);
if
(buf == NULL)
{
return
NULL;
}
if
(
fread
(buf, 1u, size, file) != size)
{
return
NULL;
}
return
buf;
}
buf에서 malloc을통해 동적할당을 해준다.
fread에서 읽기에 실패하면 NULL을 리턴하고, 그뒤에 return but;가 존재하는데
여기서 malloc을 해줬지만 free를 해주지않았기에 메모리 릭이 발생한다.
char
*foo = (
char
*)
malloc
(100);
char
*bar = (
char
*)
malloc
(200);
bar = foo;
foo에선 100바이트크기로 동적할당을 해주었고, bar에는 200바이트를 할당해주었다.
하지만 bar에 foo를 넣는다. 이렇게되면 200바이트 할당된 힙에 접근할수가없어 메모리릭이 발생한다.
char
* get_buffer(
void
)
{
return
(
char
*)
malloc
(100);
}
void
test_func()
{
get_buffer();
}
get_buffer엣는 100바이트 크기를 동적할당해준다. 하지만 test_func에선 함수호출만해줄뿐 받는 인자가 없기때문에 100바이트만큼의 힙에 접근이 불가해 메모리릭이 발생한다.
[참고:http://story.wisedog.net/메모리-누수-memory-leak란/}