Qt: "Das Programm ist abgestürzt."

Qt Programmierung, QML, Qt-Plattformen
wellnestom
Beiträge: 30
Registriert: Fr Nov 09, 2012 10:29 am

Qt: "Das Programm ist abgestürzt."

Beitrag von wellnestom » Mi Dez 12, 2012 5:16 pm

Hi,
das sagt mit der QtCreator. Aber warum? Folgender Code:

Code: Alles auswählen

while (1){

        QApplication a(argc, argv);

        Werte w;
        w.show();

        Opel wtacho;
        wtacho.show();

        a.exec();

    }
Das ist jetzt natürlich stark vereinfacht ;)
Die while Schleife ist in meiner main, ohne funktioniert alles bestens, aber ich möchte nachdem die beiden Fenster geschlossen werden beide wieder NEU starten.
Fragt mich bitte nicht warum, eigentlich will ich das in if-Abfagen verpacken und je nach dem andere Fenster öffnen. Und die alten sollen komplett weg sein! Also kein .hide() und in einem anderen scope damit die auch ja kein event mehr ausführen. So ists aber das gleiche Problem und leichter zu erklären. ;)
Sobald beide fenster geschlossen werden und der Rechner nach dem a.exec(); auf das scope-Ende trifft stürzt das Programm ab. Prints zwischen a.exec(); und der Klammer } werden noch ausgegeben.

Weis wer warum?

Gruß Tom

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von nufan » Mi Dez 12, 2012 6:22 pm

EDIT: Hm... ich glaube ich hab die Frage falsch verstanden. Ich seh mir das später nochmal genau an.
wellnestom hat geschrieben:Weis wer warum?
Qt beendet nach Standardeinstellungen automatisch das Programm, wenn das letzte Fenster geschlossen wird. Das kannst du über die Methode setQuitOnLastWindowClosed(bool) ändern, siehe: http://doc.qt.digia.com/qt/qapplication ... losed-prop

wellnestom
Beiträge: 30
Registriert: Fr Nov 09, 2012 10:29 am

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von wellnestom » Mi Dez 12, 2012 6:46 pm

Äh, nein. Das Programm wird nicht beendet wenn ich das letzte Fenster schließe.
Ich schließe die Fenster so:

Code: Alles auswählen

QApplication::closeAllWindows();
Er arbeitet dannach einfach nach dem a.exec(); weiter. Das soll er auch. Aber wenn er an das } trifft stürzt das Programm ab. Egal ob in einer While-Schleife, oder in einem leeren Scope oder sonst was. Nur wenn ich dannach ein exit(0); ausführe wird das Programm normal beendet. Ich bekomm auch keine Informationen dazu in der Konsole vom QtCreator. Eben nur "Das Programm ist abgestürzt."

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von nufan » Mi Dez 12, 2012 10:39 pm

Kannst du bitte mal ein kompilierbares Beispiel zeigen?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von Xin » Do Dez 13, 2012 9:26 am

QApplication innerhalb einer Weile-Schleife!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

wellnestom
Beiträge: 30
Registriert: Fr Nov 09, 2012 10:29 am

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von wellnestom » Do Dez 13, 2012 9:55 am

Hier.
;)

Ja, vergiss den Sinn der While-Schleife. Ist nur zum testen. Es geht eben NIE zwischen { und }. Und ich dachte am einfachsten teste ich das mit ner Schleife.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von nufan » Do Dez 13, 2012 10:28 am

Xin hat geschrieben:QApplication innerhalb einer Weile-Schleife!?
War auch mein erster Verdacht, aber warum eigentlich nicht?!
wellnestom hat geschrieben:Ja, vergiss den Sinn der While-Schleife. Ist nur zum testen. Es geht eben NIE zwischen { und }. Und ich dachte am einfachsten teste ich das mit ner Schleife.
Dein Problem liegt im Destruktor von "Opel":

Code: Alles auswählen

    delete myScene;
    delete hgbilditem;
Wobei du oben folgende Zeile hast:

Code: Alles auswählen

myScene->addItem(hgbilditem);
"myScene" ist das Eltern-Objekt von "hgbilditem". Wird "myScene" gelöscht, gibt es den Speicher von allen Kindern frei. Bei deinem delete-Aufruf ist der Speicher also schon freigegeben. Die doppelte Freigabe führt zum Absturz.
Du hast 2 Möglichkeiten das zu lösen:
* Die Reihenfolge ändern: Wenn du händisch zuerst die Kinder freigibst, dann machen dir nachher Elternschaften keine Probleme mehr.
* Nur das Elternobjekt löschen: Qt gibt automatisch den Speicher aller Kinder frei.

wellnestom
Beiträge: 30
Registriert: Fr Nov 09, 2012 10:29 am

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von wellnestom » Do Dez 13, 2012 9:03 pm

Danke! Und schon gehts. :D


Gruß Tom

wellnestom
Beiträge: 30
Registriert: Fr Nov 09, 2012 10:29 am

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von wellnestom » Fr Dez 14, 2012 12:11 pm

Mir ist grad aufgefallen das alles funktioniert und 'richtig' aussieht wenn ich auf meinem Linux System arbeite. Jetzt hab ich mal versucht das Projekt unter Windows XP (qt 4.8.3, minGW, QtCreator 2.5.2) zu kompilieren. Hat soweit alles geklappt, nur stehen meine Zeiger in die komlett falschen Richtungen :shock: Der Drehpunkt und die Position stimmen, nur sieht es aus als ob die schon irgendwie 'rotiert' worden sind. Unter Win7 stehen die dann nochmals anders, im Kompatiblitätsmodus für WinXP siehts dann wieder wie WinXP aus.

Wie kann das sein? Bin ich bescheuert? :?:

Gruß Tom

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Qt: "Das Programm ist abgestürzt."

Beitrag von nufan » Fr Dez 14, 2012 2:32 pm

wellnestom hat geschrieben:Mir ist grad aufgefallen das alles funktioniert und 'richtig' aussieht wenn ich auf meinem Linux System arbeite. Jetzt hab ich mal versucht das Projekt unter Windows XP (qt 4.8.3, minGW, QtCreator 2.5.2) zu kompilieren. Hat soweit alles geklappt, nur stehen meine Zeiger in die komlett falschen Richtungen :shock: Der Drehpunkt und die Position stimmen, nur sieht es aus als ob die schon irgendwie 'rotiert' worden sind. Unter Win7 stehen die dann nochmals anders, im Kompatiblitätsmodus für WinXP siehts dann wieder wie WinXP aus.
Komisches Problem... verwendest du irgendwelche nicht initialisierten Werte? Gib mal deine ganzen Koordinaten/Drehungen aus und vergleiche die Systeme. Letzte Möglichkeit wäre wohl ein Bug in Qt selbst.

Antworten