【发布时间】:2012-06-13 21:19:32
【问题描述】:
我已使用 MSVC2008 从源代码构建 Qt,因为建议避免任何不兼容问题。我在使用返回 QList 对象的 Qt 函数时遇到了问题。
QList<QNetworkInterface> *netInterfaces = new QList<QNetworkInterface>;
*netInterfaces = QNetworkInterface::allInterfaces();
delete netInterfaces;
在尝试释放内存时,此代码总是会在 free.c 中的 "delete netInterfaces" 上崩溃。它指出堆已损坏,我不知道为什么,因为所有内容都是使用相同版本的 MSVC 编译的。
即使我只是调用函数,所有返回 QList 对象的 Qt 函数都会发生这种情况:
QNetworkInterface::allInterfaces();
使用上面的代码,当试图释放 Qt 分配的堆时,应用程序总是会立即崩溃。 奇怪的是,这只发生在 Debug 版本中。发布版本工作正常,没有任何崩溃。
我的 Qt 4.8.0 是用 /MT(多线程)编译的,我动态链接到库。我的应用程序也被编译为多线程。
有谁知道这里问题的可能原因是什么?
【问题讨论】:
-
我想我在这里找到了解决问题的方法:qt-project.org/forums/viewthread/16513 有人可以确认吗?
-
确保不要混合发布版本和调试版本。使用dependency walker 确认可执行文件仅与运行时的一个副本链接。