[英]QMap iteration crash
我在Windows 8.1上使用Qt 5.5。 当我运行下面的代码时,该应用程序能够完成一次迭代,但在第二次迭代时崩溃。 100%可重现。 (将其复制/粘贴到Qt Creator实例中并进行测试;它可能对您有用)。
#include <QCoreApplication>
#include <QDebug>
#include <utility>
using std::pair;
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QMap<QString, pair<QString, QString> > table_def = {
{"alpha", {"INTEGER", "PRIMARY KEY"}},
{"beta", {"VARCHAR", ""}},
{"gamma", {"VARCHAR", ""}},
{"delta", {"REAL", "DEFAULT 0"}},
{"epsilon", {"INTEGER", ""}},
{"zeta", {"INTEGER", ""}},
{"eta", {"INTEGER", ""}},
{"theta", {"INTEGER", ""}},
{"iota", {"VARCHAR", ""}},
{"kappa", {"INTEGER", "DEFAULT 0"}},
{"lambda", {"INTEGER", "DEFAULT 0"}}
};
QMapIterator<QString, pair<QString, QString> > it(table_def);
while (it.hasNext()) {
it.next();
const QString& col_name = it.key();
qDebug() << col_name;
const QString& col_type = it.value().first;
qDebug() << col_type;
const QString& extra_def = it.value().second;
qDebug() << extra_def;
}
return a.exec();
}
我的Visual Studio调试器说: Unhandled exception at 0x000000006904E394 (Qt5Cored.dll) in helloqt.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
如果有任何相关性,我在项目文件中添加了DEFINES += Q_COMPILER_INITIALIZER_LISTS
以启用带有初始化列表的QContainers初始化。 另外,如果我用QPair
替换STL pair
,则应用程序在第一次迭代时崩溃。
我看不到这段代码有什么问题。 可能会发生什么?
这是我使用的编译器版本(VS 2013)中的一个已知错误。 更新Visual Studio之后,此问题消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.