Qt两个QList成员变量导致崩溃

时间:2016-07-13 17:29:48

标签: c++ qt memory crash heap

所以我不确定这是Qt中的错误,还是我不理解某些内容,但我有这个课程:

class myClass : public QDialog, private Ui::myClass
{
    Q_OBJECT

public:
    explicit myClass(QWidget *parent = 0);

private:
    QList<ushort> list1;
    QList<ushort> list2;
}

我通过点击另一个窗口中的操作来创建此窗口:

void mainWindow::on_myClassAction_triggered()
{
    myClass *mc = new mc(NULL);
    mc->show();
}

所以现在事情变得奇怪了。即使我不在myClass中的任何地方使用list1和list2,程序也会在我关闭或有时打开myClass时崩溃。如果我注释掉其中一个或两个,它就可以了。这是怎么回事?

2 个答案:

答案 0 :(得分:1)

我正在使用Qt Creator。我刚刚重新开始使用QMake,现在它可以工作了。绝对是Qt / Qt Creator中的某种错误。

答案 1 :(得分:1)

这不是任何形式的错误。这是一个经典的二进制不兼容问题:你有一些代码依赖于你的某些类的布局,但是过时的Makefile并没有捕获这种依赖。因此,当您更改类的布局时,依赖代码不会被重新编译。 qmake每次构建它时重新扫描整个项目以寻找这种依赖关系会太昂贵。当您更改代码以引入此类二进制不兼容性时,您可以重新运行qmake

对于小型项目,您可能只希望始终重建代码,强制重新运行qmake。