Visual C ++ CRT调试

时间:2012-09-02 10:36:08

标签: c++ mfc msvcrt

当我开始使用所讨论的here调试时,我遇到了一个非常讨厌的链接器错误。

我设法将其缩小到new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )构造。一旦使用了new运算符的重载,我就得到error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" (??3@YAXPEAXHPEBDH@Z) already defined in ...

如果我从链接过程中排除该对象文件,它只会将我指向另一个。我还没有验证这一点,但我很确定他们所有这些与MFC冲突的目标文件都使用了调试新版本的运算符。

这引起了我的追逐,因为如果你谷歌这个错误,所有证据都会告诉你,你正在以错误的顺序混合CRT和MFC的东西,果然,这就是我正在做的事。

我使用dumpbin /directives删除了所有目标文件和库,并确保链接的顺序是正确的,尽管如此,我从未遇到过该错误。

CRT调试技术本质上是否与MFC不兼容或是否有解释?

我对MFC知之甚少,而且我正试图完全脱离MFC,但我想让它继续工作直到发生这种情况。

1 个答案:

答案 0 :(得分: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