프로그래밍과 잡담

Memory Leck 잡기 [비주얼 스튜디오] 본문

프로그래밍/C,C++, Win32Api

Memory Leck 잡기 [비주얼 스튜디오]

크레온 2009. 3. 11. 01:58

/////////Memory Leck /////////////

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__ )
#define new DEBUG_NEW

#endif

위에 있는걸 헤더 파일이던 main 위에던 같에 아무데나 붙여 넣는다.

그리고  main(이 main 함수는 WinMain이 될수도 있다.) 함수에  

#if defined(DEBUG) | defined(_DEBUG)
  _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
 #endif

이걸 붙여 넣는다..

이런 식으로

int main(void)

{                

   #if defined(DEBUG) | defined(_DEBUG)
     _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
   #endif  
                                             

   int* k;                                                  

   k = new int;      //일부러 메모리릭을 발생

    //메모리를 delete를 안시킨다.                                                    

 _CrtDumpMemoryLeaks();      //요걸 안하면 디버그 모드해도 안뜬다 

   return 0;

}

 

위에 있는 식으로 하고나서 디버그 모드로 들어가면 이렇게 뜬다.

'테스트.exe': 'C:\WINDOWS\system32\usp10.dll' 로드
'테스트.exe': 'C:\WINDOWS\system32\msvcrt.dll' 로드
Detected memory leaks!
Dumping objects ->
\main.cpp(16) : {125} normal block at 0x009166D0, 4 bytes long.
 Data: <    > CD CD CD CD
Object dump complete.

 

0x009166D0에서 메모리릭이 발생했다는 소리이다. 확인 하는 방법은

125라는 수를 _CrtSetBreakAlloc이라는 함수에다가 인자로 넣는다.

_CrtSetBreakAlloc(125);

 

그러면 메모리릭이 생겨난 부분으로 이동한다.

 

 

//////////////////////////////////////////////////////////////////////

잡 담

/////////////////////////////////////////////////////////////////////

나도 이런 기능은 몰랐는데 까먹으면 다시 볼려고 써 놓는다..


반응형

'프로그래밍 > C,C++, Win32Api' 카테고리의 다른 글

[C언어] 기초 3  (0) 2009.03.11
[C언어] 기초 2-1  (0) 2009.03.11
[C언어]기초2  (0) 2009.03.11
[C언어] 기초 1  (0) 2009.03.11
[Win32 API]버튼의 폰트 바꾸기..  (0) 2009.03.11
Comments