#include <crtdbg.h>
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetDbgFlag 함수는 프로그램이 시작하는 처음위치에 삽입하면 됩니다.
위에 두 줄만 추가하면 MFC 프로젝트에서는 메모리 누수가 일어난 파일과 라인이 출력줄에 표시됩니다.
그러나 MFC 이외의 프로젝트에서는 파일과 라인이 표시되지 않는데, 그걸 표시하기 위해서는
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, THIS_FILE, __LINE__ )
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
이 네줄을 쓰시면 됩니다.
단, 진한 글씨로된 3줄은 붙여서 다른 include보다 위에 세줄을 붙여서 삽입하셔야 합니다.
_CrtSetDbgFlag 함수는 마찬가지로 프로그램이 시작하는 처음위치에 삽입하면 됩니다.
출력
Detected memory leaks!
Dumping objects ->
c:\test\test.cpp(27) : {789} normal block at 0x00399B40, 200 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
설명
c:\test\test.cpp(27) : {789} normal block at 0x00399B40, 200 bytes long.
test.cpp파일 27번째 라인, 789번째로 할당된 메모리에서 누수가 일어났고, 메모리 주소는 0x00399B40이며 200 byte가
누수되었다는 의미입니다.
'Programing > Windows' 카테고리의 다른 글
Visual Studio 단축키 (0) | 2009.06.11 |
---|---|
CString <--> char * 형변환 (0) | 2009.06.11 |
Thread를 사용하는 프로젝트 디버깅시 먹통되는 현상 해결법 (0) | 2009.05.07 |
Handle leak 찾기 (0) | 2009.04.29 |
Overlapped I/O 와 IOCP Programming (0) | 2009.04.29 |