2012-09-02 37 views
1

當我開始使用討論的調試here時,遇到了一個非常討厭的鏈接器錯誤。Visual C++ CRT調試

我設法縮小到new (_NORMAL_BLOCK , __FILE__ , __LINE__)構造。只要使用新操作員的超載,我會得到error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" ([email protected]@Z) already defined in ...

如果我從鏈接過程中排除該對象文件,它只是指向另一個。我沒有證實這一點,但我很確定他們所有與MFC衝突的對象文件都使用調試器的新版本。

這導致我瘋狂追逐,因爲如果你谷歌這個錯誤,所有的證據都會告訴你,你正在錯誤的順序混合CRT和MFC的東西,果然,這就是我正在做的。

我用dumpbin /directives去了我所有的目標文件和庫,並確保鏈接的順序是正確的,儘管這一切都是我從來沒有過去的錯誤。

CRT調試技術是否與MFC本身不兼容,或者是否存在對此的解釋?

我不是很瞭解MFC,我試圖完全擺脫MFC,但我希望得到這個工作,直到發生這種情況。

+0

我試圖用CRT的充塞兩次檢測內存泄漏沒有成功。我會推薦你​​自己的包裝或繞道。或者使用其中一種內存管理工具。 –

+0

你能發佈整個鏈接器錯誤消息嗎? – john

+0

@john當然...如果有幫助。我更新了問題以包含完整的錯誤,我只剝奪了對象和文件名。 –

回答

1

在調試模式下,MFC應用程序將爲您檢測內存泄漏。要獲取有關泄漏的更多信息,你可以定義新的在每個文件的頂部DEBUG_NEW如下:

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

有關詳細信息,請參閱MSDN文章Memory Leak Detection in MFC