library/CRT
메모리 누수 체크
란마12
2011. 10. 27. 19:49
#define _CRTDBG_MAP_ALLOC_NEW
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
#endif
void ExitHandler(){
_CrtDumpMemoryLeaks();
}
void main(){
#ifdef _DEBUG
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
//_crtBreakAlloc = 129;
//_CrtSetBreakAlloc(132);
atexit(&ExitHandler);
#endif
}
다음과 같이 누수가 보고됐다면
Detected memory leaks!
Dumping objects ->
{994} normal block at 0x00DA55A0, 8 bytes long.
Data: < > CD CD CD CD CD CD CD CD
{993} normal block at 0x00DA5558, 8 bytes long.
Data: < > CD CD CD CD CD CD CD CD
{992} normal block at 0x00DA54C8, 8 bytes long.
Data: < > CD CD CD CD CD CD CD CD
중괄호 안의 숫자, 예를 들어 {994} 지점에서 중단점을 설정
_crtBreakAlloc = 994; 또는 _CrtSetBreakAlloc(994);
- stl변수가 전역으로 초기화 되면 릭이 발생된 것으로 표시됨.
가능하면 전역으로 쓰지말고 함수의 정적변수로 사용.
- vld쓰다가 최신 버전으로 교체했는데 멀티스레드에서 com사용할 때 문제가 있는 듯.
- 메인 프로세스에서 참조하고 있는 dll library내의 누수는 잡지 못함.(dll내에서 초기화시 위와 같은 체크준비를 똑같이 해야 함)