-
MFC 메모리 릭 체크시 유용한 방법dev/C,C++ 2016. 10. 17. 15:00
출처 : http://egloos.zum.com/sungod0/v/3561771
MFC 사용시,
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
프로그램이 종료 되었을때 누수된 메모리를 할당하는 부분의 소스 코드와 라인 수를 출력
Detected memory leaks!
Dumping objects ->
d:\sample\sample.cpp(35) : {48} client block at 0x003739D0, subtype 0, 4 bytes long.
Data: <( > 28 00 00 00
d:\sample\sample.cpp(34) : {47} client block at 0x00373990, subtype 0, 4 bytes long.
Data: < > 1E 00 00 00
Object dump complete.
sample.cpp 화일의 35번째 라인에서 할당된 메모리가 누수
48번째로 할당된 메모리
메모리 주소는 0x003739d0,
4Byte가 누수
MFC 미사용시,
#if !defined(_AFXDLL)
#include <windows.h>
#include <crtdbg.h>
#if defined(DEBUG) | defined(_DEBUG)
#if !defined(DEBUG_NEW)
#define DEBUG_NEW new(_CLIENT_BLOCK, __FILE__, __LINE__)
#endif
#endif
#endif
malloc 을 이용한 메모리 할당시,
// 헤더 화일
#define DEBUG_MALLOC(size) _malloc_dbg(size, _NORMAL_BLOCK, __FILE__ , __LINE__)
// 소스 코드
#define malloc DEBUG_MALLOC
memery leak detector 설정
#include <crtdbg.h>
// 프로그램 시작
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
// 프로그램 종료
_CrtDumpMemoryLeaks();