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

将其编译为发布版本没有问题,但当我执行调试版本时,我总是收到 SegmentionFault-Error 。

我的 Qt 版本是 4.8.2,我在 Fedora 和 Debian 操作系统上尝试过。

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

#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();
}

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

有帮助吗?

解决方案

崩溃是由这一行引起的:

MyApplication(int argc, char **argv);

您应该将其修改为:

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top