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
해당 위치에서 할당한 메모리가 왜 해제되지 않았는지 찾아보면 금방 메모리 누수를 잡을 수 있다!
[출처] CPP 파일에 DEBUG_NEW 활용하기!|작성자 천지인공
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의 역할
[출처] 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 |