메모리 누수를 찾는 방법은 여러가지가 있는것 같네요. 이중에 많이 사용하는 방법을 다른 사이트에서 찾아 옮겨봅니다.
1) CRT 라이브러리를 사용하여 메모리 누수 찾기
// 초기화 한다.
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
// 종료 지점이 여러 개인 경우 main() 함수 또는 WinMain() 함수 시작부분에 다음 함수를 호출한다.
// CWinApp() 생성자 함수 or InitInstance() 함수, 또는 main() 함수 시작 부분
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
// 응용 프로그램이 종료될 때 메모리 누수 보고서를 표시할 수 있다.
// ~CWinApp() 소멸자 함수 or ExitInstance() 함수, 또는 main() 함수 시작 부분
// 메모리 해제가 되지 않은 전역변수의 경우 누수현상을 보인다고 나타날 수 있다.
_CrtDumpMemoryLeaks();
// 프로그램이 종료시에 실행 시키려면 다음과 같은 방법도 있습니다.
#ifdef _DEBUG
_onexit(_CrtDumpMemoryLeaks);
#endif
// 메모리 참조값으로 소스를 찾아가려면 다음과 같이 한다. 만약 멈추기 않는다면 다음 함수가 먼저 실행을 시켜야 한다는 거죠.
// 다음 같은 경우는 전역변수가 해제 안된 경우에 속한다. 따라서 그냥 메모리 위치만 보여준다.
// {146916} normal block at 0x00395A3A0, 48 bytes long.
_CrtSetBreakAlloc(146916);
2) MFC를 사용하는 경우 다음 소스코드를 *.cpp에 추가한다.
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
3) 메모리 누수 리포트
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.
참고사이트:
https://msdn.microsoft.com/ko-kr/library/x98tx3cf.aspx
http://egloos.zum.com/sungod0/v/3561771
http://www.dreamy.pe.kr/zbxe/CodeClip/29504
https://indidev.net/forum/viewtopic.php?f=5&t=396