반응형

http://godsfly.blog.me/130089798487



header 추가

#ifdef _DEBUG
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif

WinMain() 함수에 
_CrtDumpMemoryLeaks();
Function Call

위와 같이 실행 할 경우 Debug모드로 실행 후 종료 시  아래와 같은 메시지 출력된다.
Detected memory leaks!
Dumping objects ->
{57} normal block at 0x003E5D38, 36 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 
{56} normal block at 0x003E5BF0, 268 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.
---------------------------------------------------------------------------------------
메모리 누수 검출 방법

1. 함수를 이용한 메모리 누수 검색방법

영역표시된 부분(57)이 메모리 누수가 발생하는 프로그램 주소값이다. 이 주소 값을 이용하여
_crtSetBreakAlloc(56);
라는 함수 파라미터 값으로 주소 값을 입력하게 되면 메모리 할당 및 메모리 위치, 메모리 누수 위치는 중단점에서 멈추게 된다.

2. Visual Studio 에 있는 기능을 이용한 검색 방법


영역표시된 부분이 메모리 누적이 발생한 위치값이다.
이것을 Ctrl + B를 누르게 되면 새 중단점을 지정할 수 있다.



위와 같이 설정 후 확인을 누르게 되면 메모리 누수가 발생하는 곳에서 멈추게 된다.

※ 주의사항 : 이 중단점(Break Point)는 Visual Studio에서 표시가 이루어지지 않는다. 그렇기 때문에 설정된 중단점을 삭제하기 위해서는  모든 중단점 해제(ctrl + shift + F9)로 중단점 해제해야 한다.
그렇지 않으면 매번 디버그 할때마다 같은 지역에서 멈추게 된다.

반응형

+ Recent posts