afxwin2.inl 中的断言失败,第 160 行 - 无法找到错误原因

Assertion Failed in afxwin2.inl, Line 160 - Having trouble finding cause of error

断言失败发生在 afxwin2.inl 的第 160 行,断点将我带到 dbgheap.c 的第 1394 行 - “_ASSERTE(pHead->nBlockUse == nBlockUse);”。这只发生在退出时(我不需要做任何事情,只需启动应用程序,然后关闭它就会失败。奇怪的是,它只发生在 Release Build 上。我在这一点上的理解是发生了某种内存损坏,但对于我来说,我很难找到原因。我在查看 并认为我的错误可能是 CRT 库不匹配的问题,因为我收到警告:

1>LINK:警告 LNK4098:默认库 'MSVCRT' 与其他库的使用冲突;使用 /NODEFAULTLIB:library

1>LINK:警告 LNK4098:默认库 'mfc90.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:library

1>LINK:警告 LNK4098:默认库 'mfcs90.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:library

导致错误的我开始使用的主要静态链接库是用 C++ 编写的,而不是 C,所以根据之前链接的回复,看起来这可以解释为什么忽略编译器认为有冲突的有问题的库似乎没有做任何事情。是什么让我认为也许不是因为我拥有该库的 src。 似乎 使用与我的应用程序相同的 CRT(通过项目属性检查)。话虽如此,我可能根本不明白如何从 src 生成 .lib,这可能不是检查使用什么 CRT 制作 .lib 的有效方法,在这种情况下,请赐教。

我曾尝试使用应用程序验证器来找出原因,但我在使用时遇到了问题。日志说没有错误或警告,我似乎无法打开日志文件本身来仔细查看 - 这并不重要,如果没有检测到错误,我会假设它基本上是空的。

此问题似乎不会以任何方式影响应用程序的功能。在 IDE 之外测试应用程序时,没有出现任何问题。我真的不喜欢对这种有问题的东西给予许可,而不管对功能的影响或缺乏。

问题似乎是我使用的遗留代码与功能区api 不匹配。用经典工具栏和对话框栏替换所有功能区功能完全消除了错误。