2014-01-30 98 views
1

我是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被删除的析构函数被调用。

+0

你在CStringArray上执行了一个“新”来在堆上创建它吗? – rrirower

+0

是的,我喜欢。在“/ MDd模式”下,所有的工作都完美无缺,没有内存泄露,没有崩溃...... – Groco

+0

代码崩溃了?并且,您是否在您的构建设置中包含[AFXDLL](http://msdn.microsoft.com/en-us/library/6f20edzb(v = vs.100).aspx)? – rrirower

回答

0

所以,我放弃了。我在这个问题上留下了很多时间。 我认为当我删除一个指针时存在一个潜在的问题。

我要去尝试Qt ...