Я пытаюсь скомпилировать приложение Qt 4, которое содержит вызов QProcess.
Нет проблем скомпилировать его как Release-Version, но я всегда получаю SegmentionFault-Error при выполнении Debug-Version.
Моя версия 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();
}
Хорошего дня,
Markus
Сбой вызван этой строкой:
MyApplication(int argc, char **argv);
Вы должны изменить его на:
MyApplication(int &argc, char **argv);
Причина в том, что, без ссылки, есть временная копия, которая в основном уничтожается, а ее адрес все еще сохраняется. Авария происходит при доступе впоследствии.
Смотрите предупреждение в документации из QApplication
конструктор:
Предупреждение: данные, на которые ссылаются argc и argv, должны оставаться действительными в течение всего времени жизни объекта QCoreApplication. Кроме того, argc должен быть больше нуля, а argv должен содержать хотя бы одну допустимую строку символов.
Тем не менее, это, вероятно, не стоит подклассов QApplication
в твоем случае. Даже если вы это сделаете, убедитесь, что вы не утечки памяти, не удаляя объект кучи, созданный для обработки фонового процесса с QProcess
,
Других решений пока нет …