Qt 4 - Problemas de QProcess
-
21-12-2019 - |
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
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
.