메모리 버그나 누수는 고치는 것이 어려운게 아니라 발견하는게 어렵다. 메모리 누수나 침범을 쉽게

발견하려면 메모리 관리자의 도움이 필요하다. Win32의 경우 C 런타임 라이브러리의 디버그 힙이 그러한

도움을 제공한다.

디버그 힙은 초기화되지 않은 메모리나 해제된 메모리에 다음과 같은 특별한 값들을 설정한다.

 

* 힙에 할당된, 초기화되지 않은 메모리는 0xCDCDCDCD로 설정된다.

* 스택에 할단된, 초기화되지 않은 메모리는 0xCCCCCCCC로 설정된다.

* 해제된 힙 메모리는 0xFEEEFEEE로 설정한다. (이후 재할당되면 다시 0xCDCDCDCD가 된다)

메모리가 해제되는 방식에 따라서는 해제된 메모리가 0xDDDDDDDD로 설정될 수도 있다.

* 힙에 할당된 메모리의 첫 부분과 끝 부분은 0xFDFDFDFD로 설정된다.

 

디버거에서 메모리 창을 들여다 볼 때 이 값들을 기억하고 있으면 메모리 블럭이 어떤 상태인지 알 수 있다.

 

C 런타임의 디버그 힙은 또한 힙을 조사하기 위한 몇 가지 함수들도 제공한다. 여기서는 다음 세가지만

이야기하겠다. 나머지는 Visual Studio 도움말이나 MSDN을 찾아 보기 바란다.

 

* _CrtSetDbgFlag( int newFlag): 디버그 힙의 행동 방식을 설정한다.

* _CrtCheckMemory( void): 디버그 힙을 점검한다.

* _CrtDumpMemoryLeaks( void): 메모리 누수 상황을 stdout에 출력한다.

내용 출처: Game Coding Complete (정보문화사) 책 본문중에서...

[출처] 게임 디버깅|작성자 baek2187

+ Recent posts