Frage

Ich versuche, eine Qt 4-Anwendung zu kompilieren, die den Aufruf von QProcess enthält.

Es ist kein Problem, es als Release-Version zu kompilieren, aber ich erhalte immer einen SegmentionFault-Fehler, wenn ich die Debug-Version ausführe.

Meine Qt-Version ist 4.8.2 und ich habe sie unter Fedora und Debian OS ausprobiert.

Hat jemand von euch jemals ähnliche Probleme gehabt?Ich kann es nicht herausfinden!

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

Ich wünsche euch einen schönen Tag, Markus

War es hilfreich?

Lösung

Der Absturz wird durch diese Zeile verursacht:

MyApplication(int argc, char **argv);

Sie sollten es ändern in:

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

Der Grund dafür ist, dass ohne Referenz eine temporäre Kopie enthalten ist, die im Grunde zerstört wird, während die Adresse noch gespeichert ist.Der Absturz passiert danach beim Zugriff.

Siehe die Warnung in der Dokumentation von der QApplication Konstruktor:

Warnung:Die von argc und argv referenzierten Daten müssen für die gesamte Lebensdauer des QCoreApplication Objekts gültig bleiben.Außerdem muss argc größer als Null sein und argv muss mindestens eine gültige Zeichenfolge enthalten.

Davon abgesehen lohnt es sich wahrscheinlich nicht, eine Unterklasse zu bilden QApplication in deinem Fall.Auch wenn Sie dies tun, stellen Sie sicher, dass Sie den Speicher nicht verlieren, indem Sie das Heap-Objekt, das für die Verarbeitung des Hintergrundprozesses erstellt wurde, nicht löschen QProcess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top