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)로 중단점 해제해야 한다.
그렇지 않으면 매번 디버그 할때마다 같은 지역에서 멈추게 된다.
[출처] 메모리 누수 확인 방법 및 누수 위치 검출 방식|작성자 웃긴여우
'디버깅 & 스킬 > 디버깅 & VS Debugging' 카테고리의 다른 글
이 솔루션 구성에 대해 빌드하도록 선택된 프로젝트가 없습니다. (0) | 2012.10.31 |
---|---|
Error PRJ0003 Spawning mt.exe (0) | 2012.10.31 |
메모리누수 위치확인 (0) | 2012.10.31 |
메모리누수 위치에서 디버깅 (0) | 2012.10.31 |
조건식, 변수값이 변경된 경우 브레이크 포인트에서 중단하기 (0) | 2012.10.31 |