2009-02-06 4 views
10

는 마법사는 거의 모든 CPP 파일에 다음 코드 블록을 생성합니다"#define new DEBUG_NEW"및 "#undef THIS_FILE"등이 실제로 필요합니까? 새 MFC 응용 프로그램을 만들 때

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

을하고 때로는이 추가 :

#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 

내가 제거 할 것 중복되는 경우 내 CPP 파일의이 코드. VS2008 C++/CLI MFC 응용 프로그램을 사용하고 있습니다.

CPP에서이 코드를 삭제 한 후 Debug에서 실행 해 보았는데 제대로 작동하는 것 같습니다. "새로운"변수가 잘 작동하고, 누수가 없으며, ASSERT 대화 상자에 올바른 파일 이름이 표시되고 문제의 라인으로 건너 뜁니다.

누구나 내가 할 수있는 일과 삭제하는 것이 안전한지 말할 수 있습니까?

답변

10

이것을 삭제해도 안전합니다. 디버깅 도구입니다. 그것을 남겨두면 출력 창에 프로그램이 종료 될 때의 메모리 누수에 대한 경고가 생성됩니다.

+0

정말인가요? VS2008은 코드 블록을 삭제 한 후에도 여전히 메모리 누수 개체 덤프를 표시합니다. 어쩌면이게 VC6 같은데 ...? – demoncodemonkey

+1

죄송합니다. 죄송합니다. 말씀 드린 내용에 미묘한 차이가 있음을 깨달았습니다. 코드가 있으면 출력 창이 메모리 누수가있는 파일 이름과 행을 표시합니다. – demoncodemonkey

+0

그래서 생성 된 코드의 첫 번째 부분을 설명합니다. 두 번째 부분은 어떻습니까? #undef THIS_FILE static char THIS_FILE [] = __FILE__; – demoncodemonkey

1

Microsoft Visual C++ 2010에서 전체 코드를 제거하고 #define NEW DEBUG_NEW를 헤더에 넣을 수 있습니다. 그래도 여전히 올바른 메모리 누수 보고서가 있습니다.

Detected memory leaks! 
Dumping objects -> 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7508} normal block at 0x029B9598, 54 bytes long. 
Data: <    > E4 B8 C9 00 12 00 00 00 12 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7501} normal block at 0x029B94A8, 28 bytes long. 
Data: <    > E4 B8 C9 00 05 00 00 00 05 00 00 00 01 00 00 00 
f:\source\agent\agent\deviceid.cpp(21) : {7500} normal block at 0x029CDFC0, 8 bytes long. 
Data: <  > A8 95 9B 02 B8 94 9B 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {6786} normal block at 0x029C0D88, 160 bytes long. 
Data: <  G  > E4 B8 C9 00 19 00 00 00 47 00 00 00 01 00 00 00 
f:\source\agent\sysinfo\sysinfo.cpp(27) : {6733} normal block at 0x029B84D8, 92 bytes long. 
Data: <    > 00 00 00 00 00 10 00 00 00 00 01 00 FF FF FE 7F 
Object dump complete. 
+3

아니, 당신은 전체 정보를 얻을하지 않습니다. CString 객체 (또는 일부)가 누설되었다는 것을 나타내는'strcore.cpp'의 누수만을 보여주는 코드에 주목하십시오. 올바른 DEBUG_NEW/THIS_FILE 오프셋을 사용하면'new'를 한 곳의 * your * 코드 위치를보고합니다. –