![]() |
Verständnisfrage Objektfreigabe
Hallo Gemeinde,
ich habe ein Problem mit folgendem Code (grob gekürzt):
Delphi-Quellcode:
Deklariere ich "geraet" global funktioniert es.
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var geraet:TGeraet; begin try if (key=vk_return) or (key=vk_tab) then Begin try geraet:=Tgeraet.create(edit.Text); except //mach was exit; end; //mach was end;//if key finally freeandnil(geraet); //<- Zugriffsverletzung end; end;
Delphi-Quellcode:
Hat irgendwer ne Idee, warum ich das lokal deklarierte geraet nicht freigeben kann?unit test; interface uses // type TForm1 = class(TForm) // private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses // {$R *.dfm} var geraet:TGeraet; //<- So funktioniert es procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Begin // end; |
Re: Verständnisfrage Objektfreigabe
Wenn die If-Abfrage false liefert, wird das Objekt gar nicht erst erzeugt. Besser wäre es IMHO so:
Delphi-Quellcode:
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var geraet:TGeraet; begin if (key=vk_return) or (key=vk_tab) then Begin try geraet:=Tgeraet.create(edit.Text); try //machwas mit geraet finally freeandnil(geraet); end; except //mach was exit; end; //mach was end;//if key end; |
Re: Verständnisfrage Objektfreigabe
Zitat:
|
Re: Verständnisfrage Objektfreigabe
Stimmt, das vergaß ich noch zu erwähnen.
|
Re: Verständnisfrage Objektfreigabe
Mmmh, ich ging davon aus, dass freeandnil prüft, ob es überhaupt etwas zum freigeben gibt und in dem Fall, dass die If-Abfrage false liefert eben nichts freigegeben wird.
|
Re: Verständnisfrage Objektfreigabe
Ja, aber das setzt natürlich voraus, dass das Objekt mit nil initialisiert wird, was bei lokalen Variablen nicht der Fall ist (siehe Muetzes Post).
|
Re: Verständnisfrage Objektfreigabe
Alles klar, das hilft mir weiter. Habt vielen Dank!!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz