카테고리 없음

Finding Memory Leaks Using the CRT Library

Ronie.Kang 2011. 9. 14. 15:45
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가 발생, 메모리 경계가 넘어가는걸 체크 해보는 방법도 좋습니다.