Qt 4 - проблемы с QProcess
-
21-12-2019 - |
Вопрос
Я пытаюсь скомпилировать приложение Qt 4, которое содержит вызов QProcess.
Нет проблем скомпилировать его как Release-Version, но я всегда получаю ошибку SegmentionFault при выполнении 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
.