메모리 누구 탐지
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(); 위에서 하던지 아니면 함수 밖에서 따로 하던지 위치를 잘 봐야 한다.
- Filed under : C++/_CrtDumpMemoryLeaks()