Qt 4 - QProcess问题

时间:2014-04-13 16:52:24

标签: c++ qt qt4 qtgui qapplication

我正在尝试编译一个包含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();
}

祝你有愉快的一天, 马库斯

1 个答案:

答案 0 :(得分:0)

崩溃是由这一行引起的:

MyApplication(int argc, char **argv);

您应该将其修改为:

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

原因是,没有引用,包含一个临时副本,基本上被销毁,而它的地址仍然存储。事故发生在之后的访问中。

请参阅QApplication构造函数的警告in the documentation

  

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

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