QDialog deleted Labels zweifach
Verfasst: 27. August 2008 22:04
Hallo,
ich habe eine Klasse geschrieben, die einen Dialog erstellt (erbt von QDialog). In dem Dialog befindet sich eine Liste (std::list) von Zeigern auf Klassen, die jeweils eine Zeile im Dialog repräsentieren. Dabei enthält jede dieser Klassen für seine Zeile ein Label und verschiedene andere GUI-Elemente, die alle in der Zeile platziert werden. Beim Erstellen des Dialogs wird an die Liste jeweils ein Pointer angehängt und dann der Speicher für das Objekt mit new allokiert. Das Label und die anderen GUI-Elemente haben alle das gleiche Parent - den Dialog.
(Screenshot: www.odf-online.org/temp_downloads/opt_dlg.png )
Das Problem ist, dass beim Schließen des Dialogs Speicherzugriffsfehler auftreten. Der Destruktor des Dialogs deleted zuerst alle Pointer in der Liste und macht die Liste dann leer. Aber danach kommen Speicherzugriffsfehler.
Valgrind sagt, dass der QDialog die Labels in den Zeilen noch einmal deleten möchte (die ich ja schon selbst deleted habe - aber er sagt es auch, wenn ich sie nicht delete) - anscheinend macht er das wegen den parent-Zeigern?
Ich freue mich auf eure Antworten!
ich habe eine Klasse geschrieben, die einen Dialog erstellt (erbt von QDialog). In dem Dialog befindet sich eine Liste (std::list) von Zeigern auf Klassen, die jeweils eine Zeile im Dialog repräsentieren. Dabei enthält jede dieser Klassen für seine Zeile ein Label und verschiedene andere GUI-Elemente, die alle in der Zeile platziert werden. Beim Erstellen des Dialogs wird an die Liste jeweils ein Pointer angehängt und dann der Speicher für das Objekt mit new allokiert. Das Label und die anderen GUI-Elemente haben alle das gleiche Parent - den Dialog.
(Screenshot: www.odf-online.org/temp_downloads/opt_dlg.png )
Das Problem ist, dass beim Schließen des Dialogs Speicherzugriffsfehler auftreten. Der Destruktor des Dialogs deleted zuerst alle Pointer in der Liste und macht die Liste dann leer. Aber danach kommen Speicherzugriffsfehler.
Valgrind sagt, dass der QDialog die Labels in den Zeilen noch einmal deleten möchte (die ich ja schon selbst deleted habe - aber er sagt es auch, wenn ich sie nicht delete) - anscheinend macht er das wegen den parent-Zeigern?
Ich freue mich auf eure Antworten!