2012-09-02 39 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