참고 MSDN : http://msdn.microsoft.com/ko-kr/library/x98tx3cf.aspx
http://support.microsoft.com/kb/151585/ko
메모리 누수 발견시.. 비주얼 스튜디오가 매우 친절하게 어느위치에서 누수가 발생한다고 알려준다.
그러나 VS2003이어서 그런가..? 좀 덜 잡아준다.. =_=;;;;
메모리 누수는 반드시 잡고 넘어가야 할 문제이므로..
이 CRT라이브러리를 사용하면 된다.
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
위 코드를 추가하여 주고,
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
를 프로그램 시작할 때 걸어준 후,
프로그램 종료되는 부분에
_CrtDumpMemoryLeaks();
이 코드를 넣어주면... 프로그램 실행 후 종료시에 다음과 같이.. 메모리 누수 경고가 출력된다.
Detected memory leaks! Dumping objects -> {18} normal block at 0x00780E80, 64 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. |
여기에 뜨는 {18} (욕설 아닙니다.. -_-;;)이 할당된 메모리 번호인데.. 아까 위의 _CrtSetDbgFlag를 호출해주는 부분에서 중단점을 걸어둔다.
그리고 다시 실행하면 중단점에 프로그램이 멈추었을 때, 조사식에 _crtBreakAlloc을 넣어주고..
(단일스레드와 다중스레드가 다르니 두번째 링크를 참조하세요... 여긴 단일 기준)
조사식 값에 위의 '18'을 입력한다.
그리고 계속 진행하면... 저 메모리를 할당할 때, 중단이 된다.
그때 호출스택을 따라가 보면.. 어디서 메모리 할당하고 해제하지 않았는지 확인 가능함.
댓글