블로그는 나의 힘!
[ Programing ]/C++2010. 2. 4. 13:09

앞서 '메모리 누수 체크 _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님 블로그.

Posted by Mister_Q