1

我正在尝试编译一个包含 QProcess 调用的 Qt 4 应用程序。

将其编译为 Release-Version 是没有问题的,但是当我执行 Debug-Version 时,我总是得到一个 SegmentionFault-Error。

我的 Qt 版本是 4.8.2,我在 Fedora 和 Debian OS 上试过。

你们有没有人遇到过类似的问题?我想不通!

#include <QApplication>
#include "mainwindow.h"
#include <QProcess>

class MyApplication : public QApplication{
public:
    QProcess * proc;
    MyApplication(int argc, char** argv) : QApplication(argc, argv){
        proc = new QProcess();
    }
};

int main(int argc, char *argv[])
{
    MyApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

祝你有美好的一天,马库斯

4

1 回答 1

0

崩溃是由这一行引起的:

MyApplication(int argc, char **argv);

您应该将其修改为:

MyApplication(int &argc, char **argv);

原因是,在没有引用的情况下,包含了一个临时副本,它基本上被破坏了,而它的地址仍然被存储。崩溃发生在之后的访问中。

请参阅构造函数文档中的警告QApplication

警告: argc 和 argv 引用的数据必须在 QCoreApplication 对象的整个生命周期内保持有效。此外,argc 必须大于零,并且 argv 必须至少包含一个有效字符串。

话虽如此,QApplication在您的情况下可能不值得子类化。即使这样做,请确保不会通过不删除为处理后台进程而创建的堆对象来泄漏内存QProcess

于 2014-04-13T17:57:36.803 回答