_CrtDumpMemoryLeaks() - 메모리 누수 탐지법
_CrtDumpMemoryLeaks(); : 메모리 누수 위치 찾는다(Main 끝에 삽입)
_CrtSetBreakAlloc(num); : 메모리 누구 위치에서 브레이크
::_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); : STL에서 오류 날 경우 사용
사용법
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
프로그램 시작부분(여러군데에서 종료시 사용, 프로그램 종료시 자동으로 _CrtDumpMemoryLeaks() 호출)
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
or
프로그램 종료시
_CrtDumpMemoryLeaks();
주의점
- _DEBUG가 정의된 디버그 빌드에서만 발생(릴리스 빌드에서는 일반적인 malloc 함수와 free 함수가 사용)
- #include 문은 위의 순서를 따라야 함. 순서를 변경하면 함수를 사용해도 제대로 작동하지 않음
- _CRTDBG_MAP_ALLOC가 정의되면 누수된 메모리가 할당된 파일을 찾을 수 있음. 파일 이름 뒤에 오는 괄호 안의 숫자는 파일에서의 줄 번호
방식
- _malloc_dbg 및 _free_dbg에 malloc 및 free 함수를 매핑하는 방식
기타
- _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG ); 를 통하여 출력창이 아닌 다른곳으로 출력가능
참고 : http://msdn.microsoft.com/ko-kr/library/e5ewb1h3(v=VS.90)