Absturtz beim Löschen von Objekten

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Absturtz beim Löschen von Objekten

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
Antworten