MFC

DEBUG_NEW 간단한 이해 윈도우 프로그래밍

디버그정 2008. 9. 2. 09:24
CPP 파일에 DEBUG_NEW 활용하기! 프로그래밍

2005/06/28 18:30

복사 http://blog.naver.com/l544/120014656793

비주얼 C++에서 [MFC]를 사용하고 있을 때,

CPP 파일 첫 부분에 다음과 같은 내용을 넣어두자!


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

보통 MFC 프로젝트에 있지만 다른 곳에서 가져온 CPP 파일에서는 없으니까,

복사해 주면 유용하게 쓸 수 있다.


선언이 있고 없고의 차이는 다음과 같다;


[없을 때]

Detected memory leaks!
Dumping objects ->
{78} normal block at 0x00E72870, 52 bytes long.
 Data: <C : \ M e r o n > 43 00 3A 00 5C 00 4D 00 65 00 72 00 6F 00 6E 00
Object dump complete.


[있을 때]

Detected memory leaks!
Dumping objects ->
c:\merong\tdmedia\ftdmedia.cpp(149) : {78} normal block at 0x00E72870, 52 bytes long.
 Data: <C : \ M e r o n > 43 00 3A 00 5C 00 4D 00 65 00 72 00 6F 00 6E 00
Object dump complete.



내용에서도 알 수 있듯이 메모리 누수가 발생한 곳을 쉽게 찾을 수 있도록 해준다.


  1. 메모리 할당이 일어난 소스 파일: c:\merong\tdmedia\ftdmedia.cpp

  2. 소스 파일 내 LINE 수: 149

  3. 메모리 할당된 포인터 값: 0x00E72870


해당 위치에서 할당한 메모리가 왜 해제되지 않았는지 찾아보면 금방 메모리 누수를 잡을 수 있다!



DEBUG_NEW 간단한 이해 윈도우 프로그래밍

2007/12/11 16:31

복사 http://blog.naver.com/vane77/30025246958

#include <stdio.h>
#include <stdlib.h>

//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif


#if defined(_DEBUG)
#include <crtdbg.h>
void* operator new(size_t size, const char* filename, int line)
{
        return ::operator new(size, _NORMAL_BLOCK, filename, line);
}
#endif


void main()
{
        // 디버그 플래그 설정
        _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

        // #define DEBUG_NEW new( THIS_FILE, __LINE__ )

        int *p = new( __FILE__, __LINE__ ) int; // new( int, __FILE__, _LINE__ )
}

 

References

 

http://support.microsoft.com/kb/601929/ko
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsdebug/html/_core_using_the_debug_heap.asp 

책: IT EXPERT "윈도우 프로그래머를 위한 MFC 구조와 원리",  Chapter 3 / 07-DEBUG_NEW의 역할



'MFC' 카테고리의 다른 글

스레드 정리 잘 된 글  (0) 2008.09.03
MFC에 고유의 명령(Command) 메시지 특징  (0) 2008.09.02
MFC의 구조  (1) 2008.09.02
MFC 객체간 통신 방법  (0) 2008.09.02
RTTI의 이해  (0) 2008.09.02
MFC 프로그램의 흐름 살펴보기 - 인터널  (1) 2008.09.01
AfxEndDeferRegisterClass, AfxWndProc - MFC 살펴보기  (0) 2008.09.01