Domanda

Sto cercando di compilare un'applicazione Qt 4 che contiene la chiamata di QPROCESS.

Non è un problema per compilarlo come versione-versione, ma ricevo sempre un errore segmentionfault quando eseguo la versione debug.

La mia versione Qt è 4.8.2 e l'ho provato su Fedora e Debian OS.

Qualcuno di voi ha mai avuto problemi simili? Non riesco a capirlo!

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

Buona giornata, Markus

È stato utile?

Soluzione

L'incidente è causato da questa linea:

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

Dovresti modificarlo a:

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

Il motivo è che, senza riferimento, vi è una copia temporanea inclusa che è fondamentalmente distrutta, mentre l'indirizzo di esso è ancora memorizzato. L'incidente avviene nell'accesso in seguito.

Vedere l'avviso nella documentazione del costruttore QApplication :

.

Avvertenza: i dati di cui ad ARGC e ARGV devono rimanere validi per l'intera durata dell'oggetto QCoReapplication. Inoltre, ARGC deve essere maggiore di zero e ARGV deve contenere almeno una stringa di caratteri validi.

Detto questo, probabilmente non vale la pena di sottoclasse QApplication nel tuo caso. Anche se lo fai, assicurati di non perdere la memoria non eliminando l'oggetto heap creato per gestire il processo di sfondo con QProcess.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top