Visual Cpp에서 MemoryLeak 찾기

From YYpBD's MediaWiki

Jump to: navigation, search

malloc나 new를 자주 썼는데 어디선가 메모리 릭이 발생하는것 같을때 찾을 수 있는 방법이다.

다른 찾아주는 툴도 있겠지만 간단하게 찾고자 할때 좋은 방법이다.

아래의 디버그 define을 공용 헤더에 넣어주거나 cpp 파일에 넣는다.
vc에서는 new에 대한 DEBUG_NEW를 기본으로 넣어주나 c코딩형식의 malloc는 찾질 못하므로 malloc_dbg를 추가해준다.


#ifdef _DEBUG
#define new DEBUG_NEW
#include "crtdbg.h"
#define   malloc(s)         _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#endif

// [[[malloc 확인코드]]]
  char *a = (char *)malloc( 1024 );
  memset( a, 0x00, 1024 );
  strcpy( a, "abcd" );
//  free( a );

실행 및 프로그램 종료 후 출력창에 표시되는 내용

Detected memory leaks!
Dumping objects ->
d:\mywork\pgtest_vc9\system\memoryleak\memoryleak\memoryleakdlg.cpp(177) : {145} normal block at 0x003AD370, 1024 bytes long.
Data: <abcd            > 61 62 63 64 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.

memoryleakdlg.cpp 의 177번째 라인에서 1024 byte의 메모리 누수가 났음을 알려준다.


// [[[new 확인코드]]]
  char *a = new char[1024];
  memset( a, 0x00, 1024 );
  strcpy( a, "dcba" );
//  delete [] a;

실행 및 프로그램 종료 후 출력창에 표시되는 내용

Detected memory leaks!
Dumping objects ->
d:\mywork\pgtest_vc9\system\memoryleak\memoryleak\memoryleakdlg.cpp(164) : {145} normal block at 0x003AD370, 1024 bytes long.
Data: <dcba            > 64 63 62 61 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.

memoryleakdlg.cpp 의 164라인에서 1024 byte의 메모리 누수가 났음을 알려준다.



메모리 누수 검출은 그 코드가 실행이 되어야만 검출이 가능하므로 테스트 시에는 모든 동작을 실행시켜보고 난 후에 확인해야한다.

맞춤검색