![]() |
TImages, deren Pointer in einer TList stehen, frei geben
Hallo :hi:
Ich habe ein Problem, und zwar folgendes: Ich erstelle dynamisch mehrere TImage-Objekte und speichere diese mit folgendem Code in eine TList:
Delphi-Quellcode:
Nun möchte ich diese Images wieder freigeben und so hab ich versucht, dies so zu lösen:
MyImage: TImage;
Images: TList; {...} MyImage := TImage.Create( Form1 ); MyImage.Parent := Form1; {...} Images.Add( @MyImage );
Delphi-Quellcode:
Leider gibt es beim schließen des Programms eine AV :(
procedure TForm1.FormDestroy(Sender: TObject);
var i: Integer; MyImage: ^TImage; begin for i := 0 to Images.Count - 1 do begin MyImage := Images.Items[i]; MyImage^.Free; end; Images.Free; end; Kann mir jemand helfen und erklären, wo der Fehler in diesem Code ist ?? |
Re: TImages, deren Pointer in einer TList stehen, frei geben
Wie schon oft gesagt, Objektreferenzen (also z.B. Image: TImage) sind schon selbst Pointer. Delphi nimmt dir schon die meiste Arbeit ab, mit ^TImage hast du einen Pointer auf einen Pointer auf deine Klasse.
Nimm am besten gleich ![]() |
Re: TImages, deren Pointer in einer TList stehen, frei geben
so, ich hab jetzt eine TObjectList genommen, und füge die Images mit
Delphi-Quellcode:
ein, und gebe die Objekte auch wieder mit
Images.Add( MyImage );
Delphi-Quellcode:
wieder frei, nur bekomme ich immer noch eine AV :cry:
for i := 0 to Images.Count do
Images.Items[i].Free; |
Re: TImages, deren Pointer in einer TList stehen, frei geben
Ist die Eigenschaft OwnsObject der ObjectList gesetzt? Dann sezte sie auf False, dann übernimmt die Liste die Freigabe nicht selbst.
Edit: Oder gib einfach nicht selbst frei... Gruß, teebee |
Re: TImages, deren Pointer in einer TList stehen, frei geben
oh, das macht eine TObjectList selber ?? :oops:
na, dann ist das problem gelöst :-D |
Re: TImages, deren Pointer in einer TList stehen, frei geben
Zur ursprünglichen Frage:
Nach unten zählen!
Delphi-Quellcode:
for i := Images.Count - 1 downto 0 do
Images.Delete(i); |
Re: TImages, deren Pointer in einer TList stehen, frei geben
okay,
nochmals danke |
Re: TImages, deren Pointer in einer TList stehen, frei geben
Moin idontwantaname,
wenn Du dir Objekte so erzeugst
Delphi-Quellcode:
nämlich mit Angabe eines Owners (in diesem Falle Form1), brauchst Du diese nicht selber freizugeben.
MyImage := TImage.Create( Form1 );
Dies geschieht automatisch, wenn der Owner freigeben wird. |
Re: TImages, deren Pointer in einer TList stehen, frei geben
Hi,
alternativ zum nach unten zählen kann man es auch so lösen:
Delphi-Quellcode:
cu
while (Images.Count > 0) do
Images.Items[0].Free; |
Re: TImages, deren Pointer in einer TList stehen, frei geben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz