我正在尝试编译一个包含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();
}
祝你有愉快的一天, 马库斯
答案 0 :(得分:0)
崩溃是由这一行引起的:
MyApplication(int argc, char **argv);
您应该将其修改为:
MyApplication(int &argc, char **argv);
原因是,没有引用,包含一个临时副本,基本上被销毁,而它的地址仍然存储。事故发生在之后的访问中。
请参阅QApplication
构造函数的警告in the documentation:
警告:argc和argv引用的数据必须在QCoreApplication对象的整个生命周期内保持有效。此外,argc必须大于零,并且argv必须至少包含一个有效的字符串。
话虽如此,在您的案例中可能不值得为QApplication
进行子类化。即使这样做,也要确保不会因为QProcess
删除为处理后台进程而创建的堆对象而泄漏内存。