问题4-Q过程问题

Qt 4 - QProcess problems

本文关键字:问题 过程 4-Q      更新时间:2023-10-16

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

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

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

祝你今天愉快,Markus

崩溃是由以下行引起的:

MyApplication(int argc, char **argv);

您应该将其修改为:

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

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

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

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

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