Вопрос

Я пытаюсь скомпилировать приложение 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top