블로그는 나의 힘!
[ Programing ]/C++2010. 1. 31. 07:08

[메모리 누수 발견]  INIT_CRTDEBUG();     BREAK_ALLOC( INT );   
==================================================================================== 
 void main() {
    INIT_CRTDEBUG();
    
    int *pi = NULL;
    pi = new int();
 
    ASSERT( pi );
    *pi = 3.141592f;
    TRACE( "pi = %i \n", *pi );
    //SAFE_DELETE( pi );        // 동적으로 할당된 메모리 pi 해지하지 않는다.
}
 
// 디버그 실행 (F5)하면 디버그 출력 창에 메모리 누수에 대한 정보가 출력.
-> (결과) {45} normal block at 0x00374C80, 4bytes long.    
//CRT 디버그 함수가 유지하는 크기가 4바이트인 45번 메모리 블록이 할당되었을 뿐 해제되지 않았다는 것 의미.
// 45번 메모리 블록을 할당하는 코드에 브레이크 포인트를 설정한다. BREK_ALLOC()
 
 
 
 void main() {
    INIT_CRTDEBUG();
    BREAK_ALLOC( 45 );    // 45번 메모리 블록에서 디버그 추적 시작.
    
    int *pi = NULL;
    pi = new int();
 
    ASSERT( pi );
    *pi = 3.141592f;
    TRACE( "pi = %i \n", *pi );
    //SAFE_DELETE( pi );        // 동적으로 할당된 메모리 pi 해지하지 않는다.
}
 
// 디버그 런 하면 45번 메모리 블록을 할당하는 코드(pi를 할당하는 코드)에서 사용자 브레이크 포인터 실행된다.



 - 메모리 누수(memory leak)를 발견 하기 위한 CRT 디버그 함수를 실행한다.

라벨 수정: 2006. 6월호 마이크로소프트웨어 - C++ 99% 활용법 생성자,소멸자 활용하기 p317
 






Posted by Mister_Q