Einzelnen Beitrag anzeigen

Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Pointer von AddObject wieder freigeben

  Alt 5. Nov 2005, 14:32
Hi Pfoto!

Du bist schon ziemlich nah dran. Das Merken funktioniert so (wie du das schon richtiger-weise erkannst hast):
Listbox.Items.AddObject('Item 1', TObject(IntegerWert)); Den Wert bekommt du dann über:
Integer(Listbox.Items.Objects[1]) Freigeben musst du hier nichts, weil du zum Merken des Wertes einen Speicherbereich nimmst, der von der Stringlist genutzt wird. Dieser Bereich wird beim "Items.Add" reserviert und beim "Items.Delete" o.ä. wieder freigeben. Ein Free an dieser Stelle ist überflüssig bzw. sogar eine Fehlerquelle denn: Nehmen wir an du merkst dir einen Int-Wert 576 so:Listbox.Items.AddObject('Item 1', TObject(576)); . Wenn du dann ein Free aufrufst, würde Delphi bzw. dein Programm versuchen, ein angenommenes TObject ab der Adresse $240 (dez: 576) im RAM freizugeben. Dies wiederum könnte zu einer EAccessVioalation führen.
So, genug geschwafelt, wahrscheinlich hast du das alles schon geahnt.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat