앞서 '메모리 누수 체크 _CrtSetDbgFlag(), _CrtDumpMemoryLeaks()' 부분에서 메모리 누수 발생시 디버그 output창에 메시지를 표시해 준다고 설명했었다.
하지만 디버깅에 나오는 메시지는 2가지 타입이다.
Detected memory leaks!
Dumping objects ->
D:\Project\WorkTest\Sorce\cMemory.cpp(123) : {12} nomal block at 0x02BC31D8, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD
Object dump complete.
첫번째는, 친절하게 해당 위치와 파일, 몇번째 줄에 누수가 발생했는지 알려 주는 메시지다.
이 메시지는 디버깅에서 알려준 곳으로 가 메모리 누수 관련된 코드를 수정해 주면 된다.
Detected memory leaks!
Dumping objects ->
{236333} nomal block at 0x02BC31D8, 8 bytes long.
Data: < > 08 00 00 00 00 00 00 00
{236331} nomal block at 0x02B808A0, 8 bytes long.
Data: < > 08 00 00 00 09 00 00 00
..... ( 요약 ) .....
Object demp complete.
두번째는, 위와 같이 위치 경로가 없는 경우다.
이 경우는 직접 확인할 방법이 없다. 그러니 다음 과정을 거쳐 위치를 찾아내자.
// main() 함수 안에 코드를 삽입한다.
// 236333은 위에 메모리 누수로 나온 { }안의 숫자.
_crtBreakAlloc = 236333;
이 코드를 삽입 후 디버그 모드(F5)로 실행 시 메모리 누수가 발생하는 곳에서 멈춰 버린다.
메모리 누수 때문에 골머리 앓고 있는데 디버깅 위치 값도 안나와 고심차에 한줄기 빛과 같다고 할까?!
==============================
[ _crtBreakAlloc 요약 ]
- 코드 추척시 디버그 사용하여, 특정 시점에 사용자가 정의한 중단점 위치로 멈춘다.
- 메모리 누수, 메모리 할당, 메모리 해제 시 위치 찾기에 유용.
출처 :
support.microsoft.com Microsoft 고객지원.
blog.daum.net/sachonwon sachonwon님 블로그.
'[ Programing ] > C++' 카테고리의 다른 글
전처리문의 종류(#include, #define, #ifdef, ... ) (1) | 2010.02.10 |
---|---|
[ reinterpret_cast ] 그 강력함을 알고 쓰자. (0) | 2010.02.04 |
[Memory Leak Detector] 메모리 누수 체크 _CrtSetDbgFlag(), _CrtDumpMemoryLeaks() (2) | 2010.02.04 |
VC++ Warning 목록 (0) | 2010.01.31 |
VC++ Error 목록 (0) | 2010.01.31 |