[메모리 누수 발견] 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번 메모리 블록이 할당되었을 뿐 해제되지 않았다는 것 의미.
//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 디버그 함수를 실행한다.
- 메모리 누수(memory leak)를 발견 하기 위한 CRT 디버그 함수를 실행한다.
라벨 수정: 2006. 6월호 마이크로소프트웨어 - C++ 99% 활용법 생성자,소멸자 활용하기 p317
'[ Programing ] > C++' 카테고리의 다른 글
atexit() 로 종료 전 동작을 예약하자. (0) | 2010.01.31 |
---|---|
[ 기초 ] 배열 넘기기 (0) | 2010.01.31 |
[ Dynamic_cast< class object*>() ] 애매한 동적캐스트에 대한 정의. (0) | 2010.01.31 |
[ 콘솔 창 설정 ] AllocConsole(); freopen( "CONOUT$", "wt", stdout ); (0) | 2010.01.31 |
[ 기초 ] 팁 : 조건문 효율적으로 붙이기 (0) | 2010.01.31 |