[gelöst] Doppelter Aufruf des Destruktors
Verfasst: 21. November 2012 12:37
Guten Morgen,
lt. Call-Stack ruft der Destruktor sich selber auf. Dabei stürzt natürlich das Programm ab. Im Grunde genommen habe ich keine Ahnung wieso der Destruktor sich selber aufruft. Im Grunde habe ich im Program eine Fläche wo ich nur die einzelnen Widgets wie einen Desktop austausche. Jedesmal wenn ein anderer Desktop angezeigt werden soll, wird der Alte (bis auf Ausnahmen) wieder zerstört. Nur der aktuelle Desktop macht da Probleme, mit allen Anderen (rund 15) funktioniert es.
Die Methode die den Destruktor auslöst ist in der gui.cpp:
Seit Wochen funktioniert es ohne Probleme. Nachdem ich gestern auf dem Desktop noch zwei QPushButtons hinzugefügt habe, habe ich diese Probleme. Einmal alles neu erstellen/kompilieren brachte leider nicht die Lösung
Hat jemand zufällig einen Ahnung wonach ich suchen kann, damit das wieder funktioniert?
hand, mogel
lt. Call-Stack ruft der Destruktor sich selber auf. Dabei stürzt natürlich das Programm ab. Im Grunde genommen habe ich keine Ahnung wieso der Destruktor sich selber aufruft. Im Grunde habe ich im Program eine Fläche wo ich nur die einzelnen Widgets wie einen Desktop austausche. Jedesmal wenn ein anderer Desktop angezeigt werden soll, wird der Alte (bis auf Ausnahmen) wieder zerstört. Nur der aktuelle Desktop macht da Probleme, mit allen Anderen (rund 15) funktioniert es.
Die Methode die den Destruktor auslöst ist in der gui.cpp:
Code: Alles auswählen
void Gui::openDesktop(BaseDesktop* desktop) {
// ggf. ein Display deaktivieren
if (Gui::display != NULL) openDisplay(NULL);
// den alten Desktop entfernen (nur bei Wechsel zwischen Home/Menu/Page)
if (Gui::desktop != NULL) {
instance->center.removeWidget(Gui::desktop);
Gui::desktop->hide();
}
// den neuen Desktop setzen
if (desktop != NULL) instance->center.insertWidget(-1, desktop);
// den alten Desktop löschen - außer Home&Menu&Error
if (Gui::desktop != NULL) {
if (Gui::desktop != Homescreen::getInstance()) {
if (Gui::desktop != MenuScreen::getInstance()) {
if (Gui::desktop != ErrorDesktop::getInstance()) {
delete Gui::desktop;
}
}
}
}
// neuen Desktop merken
Gui::desktop = desktop;
}
Hat jemand zufällig einen Ahnung wonach ich suchen kann, damit das wieder funktioniert?
hand, mogel