2009-01-08 22 views
3

我試圖使用CRT內存泄漏檢測,但我不斷收到以下消息在Microsoft Visual Studio中:「檢測到的內存泄漏 - 跳過對象轉儲。」我永遠無法將它實際做到並拋棄對象。Visual Studio _CrtDumpMemoryLeaks總是跳過對象轉儲

我遵循微軟有關內存泄漏檢測(http://msdn.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx)文章中的指示,但沒有運氣。

在我的stdafx.h我已經(重建整個項目):

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 

在我的應用程序的入口點,我有:

_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 

我也希望它會顯示微軟廣告格式中的文件名和行號:

Detected memory leaks! 
Dumping objects -> 
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long. 
Data: <    > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete. 

雖然我從來沒有能夠得到一個對象轉儲,但我注意到,其他人說,他們看到這些方針的東西(甚至_CRTDBG_MAP_ALLOC定義):

Detected memory leaks! 
Dumping objects -> 
{18} normal block at 0x00780E80, 64 bytes long. 
Data: <    > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete. 

我真的不希望花時間重寫new和delete操作,所以我希望CRT調試能幫助我。如果這不起作用,我可能會覆蓋新的和刪除操作符,但我真的想要獲取帶有文件名和行號(十字指紋)的分配信息。

感謝, 基里爾·

回答

1

我沒有在這裏我的機器上,但是當你安裝裝配MSVC你有安裝的選項(大多數的)爲C運行時庫的源代碼(即爲MSVCRTxx.xxx)。如果您在源代碼中查看「跳過對象轉儲」,那麼您可能會弄清楚爲什麼跳過對象轉儲。

+0

好吧,我會盡力,謝謝你的信息:)。 – Kiril 2009-01-08 00:26:53

1

原因文件名和行印是因爲分配是使用new宏通過__FILE____LINE__.如果你不想碰new做,你將不會被傳遞__FILE____LINE__到CRT和它將無法打印。這裏沒有什麼大的魔法,真的。

2

我剛剛使用Visual Leak Detector在使用_CrtDumpMemoryLeaks方法獲取大量沒有文件名/行號的泄漏對象後。 VLD像廣告一樣工作(它是免費的),我對此很滿意。