我是C++世界的noob,我面临一个奇怪的行为。我使用Visual Studio 2010.删除CStringArray时发生崩溃*
上下文:我决定使用wxWidget进行GUI。
对于这一点,我在我的项目属性来更改以下设置:
C/C++>代码生成>运行库>/MTD(以前是/ MDD)在共享DLL
一般>使用MFC>使用MFC的(以前是在一个静态库中使用MFC)
由于这些变化,所有我delete[]
CStringArray*
崩溃我的应用程序。 我尝试通过delete
更改delete[]
,但它会导致巨大的内存泄漏。
我不明白为什么这些项目设置中的更改会产生这种行为差异。
编辑:
输出信息是:
HEAP [xxx.exe]:指定RtlValidateHeap(002B0000, 002BDE54)视窗无效地址已触发XXX中断点。可执行程序。
这可能是由于堆损坏引起的,这表明存在 xxx.exe或其已加载的任何DLL。
这也可能是由于用户按下F12而xxx.exe有焦点。
我已阅读that:
CRT库使用弱外部链接的新建,删除和 的DllMain函数。 MFC库还包含新的,删除和DllMain函数。这些函数要求MFC库链接到CRT库之前链接到 。
于是,我就在属性添加>配置属性>链接>输入>忽略特定的默认库:nafxcwd.lib; libcmtd.lib;
没有变化。
在调用堆栈中,我看到它的CStringArray :: vector被删除的析构函数被调用。
你在CStringArray上执行了一个“新”来在堆上创建它吗? – rrirower
是的,我喜欢。在“/ MDd模式”下,所有的工作都完美无缺,没有内存泄露,没有崩溃...... – Groco
代码崩溃了?并且,您是否在您的构建设置中包含[AFXDLL](http://msdn.microsoft.com/en-us/library/6f20edzb(v = vs.100).aspx)? – rrirower