메모리 누수 체크

library/CRT 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내에서 초기화시 위와 같은 체크준비를 똑같이 해야 함)




'library > CRT' 카테고리의 다른 글

CRT(C Runtime) Debugger사용방법  (0) 2014.05.14
컴파일 옵션  (0) 2013.02.22
errno  (0) 2011.01.08
유니코드를 위한 함수  (0) 2011.01.08
시간과 날짜와 관련된 라이브러리 함수들  (0) 2010.12.15
블로그 이미지

란마12

,