1

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

我设法将其缩小到new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )构造。一旦使用了新运算符的重载,我就会得到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,但我想让它工作直到发生这种情况。

4

1 回答 1

1

MFC 应用程序将在调试模式下为您检测内存泄漏。要获取有关泄漏的更多信息,您可以在每个文件的顶部为 DEBUG_NEW 定义 new ,如下所示:

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

有关详细信息,请参阅 MSDN 文章MFC 中的内存泄漏检测

于 2012-09-04T05:13:16.877 回答