我是C ++世界的诺布,我面临一种奇怪的行为。我使用Visual Studio 2010。
上下文:我决定使用wxWidget进行GUI。
为此,我必须在项目属性中更改以下设置:
C / C ++ > 代码生成> 运行时库> / MTd (以前是/ MDd)
一般> 使用MFC > 在共享DLL中使用MFC (以前在静态库中使用MFC)
自从这些更改后,我delete[]
上的所有CStringArray*
都会崩溃我的应用。
我尝试将delete[]
更改为delete
,但这会导致巨大的内存泄漏。
我不明白为什么项目设置中的这些变化会产生这种行为差异。
编辑:
输出消息为:
HEAP [xxx.exe]:为RtlValidateHeap指定的地址无效(002B0000, 002BDE54)Windows在xxx.exe中触发了断点。
这可能是由于堆的损坏,这表明存在错误 xxx.exe或它已加载的任何DLL。
这也可能是由于用户在xxx.exe有焦点时按下F12。
我看过that:
CRT库使用弱外部链接进行new,delete和 DllMain功能。 MFC库还包含new,delete和 DllMain功能。这些函数需要MFC库 在CRT库链接之前链接。
所以我尝试添加属性> 配置属性> 链接器> 输入> 忽略特定默认库: nafxcwd.lib; libcmtd.lib;
没有变化。
在调用堆栈中,我看到它是CStringArray :: vector删除了被调用的析构函数。
答案 0 :(得分:0)
所以,我放弃了。我在这个问题上花了很多时间。 我认为当我删除指针时会出现一个潜在的问题。
我要试试Qt ......