Visual Studio를 사용시 아래 링크를 참조하면 memory leak을 쉽게 잡을 수 있습니다.
http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx
Tool을 이용하지 못 하는 경우에는,
malloc이나 free가 호출 될때 블럭 사이즈와 counter를 계산하여 free가 되지 않은 곳에
위치를 잡아두고, 프로그램이 끝날 때 출력하면 memory leak을 쉽게 잡을 수 있습니다.
static void *malloc_dbg(size)
{
totalMemoryUsage += size;
return malloc(size);
}
static void free_dbg(void *dst, int size)
{
totalMemoryUsage -= size;
free(dst);
}
void reportMemoryReport()
{
if (!totalMemoryUsage) {
return;
}
// memory leak detected!
//
}
뭐 대충 이런거고요.
좀도 지속적으로 써먹을꺼면, malloc 할때 #define로 malloc_dbg를 좀더 다듬어 주면 되겠네요.
malloc 위치라던지 이런걸 받아 테이블에 기억해두고 나중에 해제가 되면 테이블에서 삭제.
추후 리포트에서 memory 가 해제되지 않을을 때 출력.
기초적인 내용을 그냥 끄적 해봤습니다.
하나더 magic code를 malloc시에 넣어 buffer overflow가 발생, 메모리 경계가 넘어가는걸 체크 해보는 방법도 좋습니다.