c++ - Visual C++ CRT调试

标签 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,但我希望在这种情况发生之前让它发挥作用。

最佳答案

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

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

有关详细信息,请参阅 MSDN 文章 Memory Leak Detection in MFC

关于c++ - Visual C++ CRT调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12235258/

相关文章:

Python递归错误,但没有使用递归

c++ - 使用 COM 跨 CRT 边界调用是否安全?

msvcrt - 私有(private)非托管并排装配问题

C++如何检查两个毫秒值的差异是否为正?

c++ - Winsock 监听和接受函数 (C++)

c++ - 正弦波和微分函数

c++ - 单独线程中的两个窗口一起激活

wpf - Microsoft Office 2010 使用 WPF 还是普通的旧 MFC?

c++ - 如何使用带硬件加密芯片的openssl?

c++ - 渲染目标 ID2D1Bitmap 错误