본문 바로가기
Programming/Tips(C++,C#)

메모리 누수 발견시

by 곰네Zip 2014. 3. 28.

참고 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'을 입력한다.

그리고 계속 진행하면... 저 메모리를 할당할 때, 중단이 된다.

그때 호출스택을 따라가 보면.. 어디서 메모리 할당하고 해제하지 않았는지 확인 가능함.

 

반응형

댓글