Seite 1 von 1

Absturtz beim Löschen von Objekten

Verfasst: 18. November 2010 20:01
von Rumbert
Hallo mit einander,

ich erzeuge zur Laufzeit Sets von GUI-Elementen und verwalte diese in einer Liste. Bei der Liste handelt es sich um:

Code: Alles auswählen

	struct DOFEntry
	{	
		QString dofName;
		QHBoxLayout* hbox;
		QLabel* qlbText;
		QLabel* qlbAxisName;
		DOFButton* plus;
		DOFButton* minus;
	};

       QList <DOFEntry> dofList;
Ich bau die GUi auf, kann mich mit allem connecten und alles klappt wunder bar. Jetzt will ich die mit new erzeugten Objekte, die in den Pointern des Structs verwaltet werden wieder deleten:

Code: Alles auswählen


	foreach(DOFEntry entry, dofList)
	{
          // delete entry.qlbText;	// <-- hier stürzt es ab	
         
         void* test = entry.qlbText;
	 static_cast <QLabel*>(test);
	 delete (test);
	 ...
	}
ich versteh nicht warum es abstürzt, da qlbText ja ein Zeiger auf das Objekt ist. Caste ich diesen in einen void-pointer und dann in ein QLabel gehts, aber das scheint mir etwas dubios.

Hat jemand eine Idee wo der Denkfehler liegt?

Grüße Rumbert

Verfasst: 19. November 2010 07:53
von solarix
1. GUI-Elemente werden im Normalfall bereits vom Parent gelöscht. Die Frage ist also: Wie sieht denn deine Widget-Architektur aus? Hast du evt. vorher bereits den Parent gelöscht (delete childDialog;) oder so?

2. "static_cast <QLabel*>(test);": die Zeile bewirkt überhaupt nichts..

3. delete von void*: du solltest Compiler-Warnings ernst nehmen: das Löschen eines void* ist undefiniert (wieviel Speicher soll denn dort freigegeben werden?). Oder mit anderen Worten: dein Programm stürzt zwar nicht ab: aber es tut auch nicht das, was du möchtest...

4. ein minimales Beispiel wäre hilfreich..

hth..