본문 바로가기

Programing/Windows

Visual Studio에서 메모리 누수 확인하는 방법

#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
누수되었다는 의미입니다.