Pergunta

Estou tentando compilar um aplicativo Qt 4 que contém a chamada do QProcess.

Não há problema compilá-lo como versão de lançamento, mas sempre recebo um erro SegmentionFault quando executo a versão de depuração.

Minha versão Qt é 4.8.2 e experimentei no Fedora e no sistema operacional Debian.

Alguém de vocês já teve problemas semelhantes?Eu não consigo entender!

#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();
}

Tenha um bom dia Markus

Foi útil?

Solução

A falha é causada por esta linha:

MyApplication(int argc, char **argv);

Você deve modificá-lo para:

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

A razão é que, sem referência, há uma cópia temporária incluída que basicamente é destruída, enquanto o endereço dela ainda fica armazenado.A falha acontece no acesso depois.

Veja o aviso na documentação do QApplication construtor:

Aviso:Os dados referidos por argc e argv devem permanecer válidos durante todo o tempo de vida do objeto QCoreApplication.Além disso, argc deve ser maior que zero e argv deve conter pelo menos uma sequência de caracteres válida.

Dito isto, provavelmente não vale a pena subclassificar QApplication no seu caso.Mesmo se você fizer isso, certifique-se de não vazar memória, não excluindo o objeto heap criado para lidar com o processo em segundo plano com QProcess.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top