*포인터나 new로 생성한 부분에 대해 기록하고 해당 변수들에 대해 사용내역을 계속 출력하게 할 수 있으면
어떤 변수는 해제가 되었고 어떤 변수는 해제가 되었는지 비교 가능하다. 근데 cpp, c 파일을 라인단위로 가져오기가 힘들고, 뭐 이래저래 문제가 많다.
근데 이건 좀 간단하게 짜기에는 시간이 많이 걸렸기에 이와 같이 메모리 릭 체크 툴을 사용하기도 함. 그러나 어떤 위치의 어떤 변수인지는 알 수 있음.
상속을 하는 경우 부모 클래스 소멸자를 virtual로 만들어야 자식 클래스 소멸자가 불린다고 하니 참고.
Visual studio에서 체크 툴
1. CRT(C Runtime) 라이브러리 사용 방법
http://www.slideshare.net/agebreak/c-lab-10
http://msdn.microsoft.com/ko-kr/library/x98tx3cf.aspx
http://msdn.microsoft.com/ko-kr/library/x98tx3cf(v=vs.100).aspx
http://stackoverflow.com/questions/10952731/error-c2661-cobjectoperator-new-no-overloaded-function-takes-4-arguments
이 방법은 visual studio 자체 제공 같고...그냥 헤더, #define, #ifdef 그리고 아래의 것을 한번 실행하게 소스 추가 후 F5(디버그모드)로 실행 후 종료되면 됨
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
결과

2. 메모리 누수 확인 툴_VLD(Visual Leak Detector) 사용 방법
http://limjh77.egloos.com/viewer/10967509
http://blog.naver.com/PostView.nhn?blogId=envisat&logNo=60151892164
http://vld.codeplex.com/documentation
https://vld.codeplex.com/
1. VDL 라이브러리를 설치
2. 해당 프로젝트의 속성에서 몇가지 수정 (VS2010)
- Property Pages->Configuration Properties->VC++ Directories->Include Directories = C:\Program Files (x86)\Visual Leak Detector\include;$(IncludePath)
- Property Pages->Configuration Properties->VC++ Directories->Library Directories = C:\Program Files (x86)\Visual Leak Detector\lib\Win64;$(LibraryPath)
3. VDL의 bin 폴더에 있는 dll 파일 두개를 실행파일 폴더 복사
4. #include <vld.h>추가
결과
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x0000000000D300B0: 50000 bytes ----------
Call Stack:
d:\current_working\memory test\memory test\memory test.cpp (17): memory test.exe!func + 0xA bytes
d:\current_working\memory test\memory test\memory test.cpp (35): memory test.exe!wmain
f:\dd\vctools\crt_bld\self_64_amd64\crt\src\crtexe.c (552): memory test.exe!__tmainCRTStartup + 0x19 bytes
f:\dd\vctools\crt_bld\self_64_amd64\crt\src\crtexe.c (371): memory test.exe!wmainCRTStartup
0x00000000772159ED (File and line number not available): kernel32.dll!BaseThreadInitThunk + 0xD bytes
0x000000007734C541 (File and line number not available): ntdll.dll!RtlUserThreadStart + 0x21 bytes
Data:
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
Visual Leak Detector detected 1 memory leak (50052 bytes).
Largest number used: 50052 bytes.
Total allocations: 50052 bytes.
Visual Leak Detector is now exiting.
The program '[3376] memory test.exe: Native' has exited with code 0 (0x0).