메모리 누구 탐지

Posted 2012. 12. 28. 12:25

#include <crtdbg.h>        // head 추가

 

void main()

{

char* p = new char[20];        // 메모리 할당

_CrtDumpMemoryLeaks();      // 메모리릭 탐지

}

 

브레이크 포인터를 _Crt에 걸고 보면 출력에

 

'MemLeakDebug.exe' : exe ' : Loaded 'C:\win................

'MemLeakDebug.exe' : exe ' : Loaded 'C:\win................

Detexted memory leaks!

Dumping objects ->

{50} normal block at 0x00392892, 20bytes long

.......

.............

어쩌고 뜬다.

 

요게 메모리 누수 발견이라고 알려주는 거다.

여기서 볼건 {50} 이다. {50}이라는 메모리 참조값을 가지는 지점이 해제되지 않았다는 것이다.

{50}을 찾으면 된다.

 

void main()

{

_CrtSetBreakAlloc(50);            // 메모리 할당받는 곳 윗줄에 추가 해주자.

char* p = new char[20];

_CrtDumpMemoryLeaks();

}

그러면 {50} 메모리 지점을 생성하려고 할 때 에러창이 뜨면서 빠염..

 

 

주의 할 점은

정상적으로 메모리해제를 하게 되더라도 위치가 _CrtDumpMemoryLeaks(); 밑에서 하게 되면

메모리 누수로 감지 하게 된다.

ex) char* p = new char[20];

_CrtDumpMemoryLeaks();

delete [] p;

일때 누수로 감지하게 됨.

 

_CrtDumpMemoryLeaks(); 위에서 하던지 아니면 함수 밖에서 따로 하던지 위치를 잘 봐야 한다.