QMap迭代崩溃

时间:2015-07-15 02:17:24

标签: c++ qt qmap

我在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的初始化。另外,如果我用pair替换STL QPair,应用程序会在第一次迭代时崩溃。

我认为这段代码没有任何问题。可能会发生什么?

1 个答案:

答案 0 :(得分:2)

这是我使用的编译器版本中的一个已知错误(VS 2013)。更新Visual Studio后,这个问题就消失了。