Seite 1 von 2

Qt: "Das Programm ist abgestürzt."

Verfasst: Mi Dez 12, 2012 5:16 pm
von wellnestom
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

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

Verfasst: Mi Dez 12, 2012 6:22 pm
von nufan
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

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

Verfasst: Mi Dez 12, 2012 6:46 pm
von wellnestom
Ä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."

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

Verfasst: Mi Dez 12, 2012 10:39 pm
von nufan
Kannst du bitte mal ein kompilierbares Beispiel zeigen?

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

Verfasst: Do Dez 13, 2012 9:26 am
von Xin
QApplication innerhalb einer Weile-Schleife!?

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

Verfasst: Do Dez 13, 2012 9:55 am
von wellnestom
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.

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

Verfasst: Do Dez 13, 2012 10:28 am
von nufan
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.

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

Verfasst: Do Dez 13, 2012 9:03 pm
von wellnestom
Danke! Und schon gehts. :D


Gruß Tom

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

Verfasst: Fr Dez 14, 2012 12:11 pm
von wellnestom
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

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

Verfasst: Fr Dez 14, 2012 2:32 pm
von nufan
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.