![]() |
FreeAndNil() auf Array anwenden?
Moin,
ich bin anscheinend etwas verwirrt heute... Wieso ist es mir möglich ein Array mittels FreeAndNil() zu leeren, oder jedenfalls diesen Befehl auf ein Array anzuwenden? Laut Delphi-Hilfe muss der übergebene Wert eine Instanz einer von TObject abgeleiteten Klasse sein. Ein Array ist eine Instanz von TObject? Inwieweit das? :gruebel: Ich kam darauf da ein Bekannter mich fragte wieso bei ihm nach der Anwendung von FreeAndNil() auf ein Array manchmal sporadisch Fehlermeldungen auftraten. Was macht als FreeAndNil() mit dem Array, einfach nur dessen Inhalt löschen? *confused* |
Re: FreeAndNil() auf Array anwenden?
Also bei mir klappt es nicht FreeAndNil() auf ein Array anzuwenden. :mrgreen:
Hat er dich gefragt, warum manchmal Fehler auftreten, oder warum immer Fehler auftreten? Weil ein manchmal würde mich stark verwundern... |
Re: FreeAndNil() auf Array anwenden?
Ja, es treten manchmal (sporadisch) Fehler auf (Zugriffsverletzung beim Lesen von 0000000A), manchmal klappt aber eben alles.
Delphi-Quellcode:
Klappt bei mir. :gruebel:
test: array of String;
... test[1] := 'mööp'; FreeAndNil(test); |
Re: FreeAndNil() auf Array anwenden?
Ist es denn ein dynamisches oder ein statisches Array?
€dit: Roter Kasten, ich vermisse dich -.- |
Re: FreeAndNil() auf Array anwenden?
Schaut euch doch einfach mal den Code an :P .
Delphi-Quellcode:
Das wird zu 99% schiefgehn. Umso schlimmer, wenn es dann keine AV gibt.
procedure FreeAndNil(var Obj); // <- untypisiert
var Temp: TObject; begin Temp := TObject(Obj); // <-- pitterpöser Cast Fragt sich nur, warum der Parameter untypisiert ist ;) . |
Re: FreeAndNil() auf Array anwenden?
Nein, das eigentliche FreeAndNil(array) geht niemals schief. Nur beim späteren Arbeiten mit dem Array (z.B. Nachfüllen von Daten) kommt es halt in unregelmäßigen Abständen zu Fehlern.
|
Re: FreeAndNil() auf Array anwenden?
Warum nicht einfach mit SetLength die Größe auf 0 setzen?
|
Re: FreeAndNil() auf Array anwenden?
Zitat:
Schreib dir doch einen Overload zu FreeAndNil für dyn. Arrays. Falls du es gar zu dringend vermisst. :mrgreen: |
Re: FreeAndNil() auf Array anwenden?
Also ich dachte immer, dass FreeAndNil eine Kombination aus ".Free" und ":= nil" sein soll (was es scheinbar auch ist):
Delphi-Quellcode:
Daher wäre ich irgendwie sowieso nie auf die Idee gekommen das auf ein Array (Array <> Objekt) anzuwenden.
ObjectX.Free;
ObjectX := nil; //oder: FreeAndNil(ObjectX); Zitat:
|
Re: FreeAndNil() auf Array anwenden?
Zitat:
Aber es ging wie gesagt nicht um mich, wenn mich jemand solche Sachen fragt die ich selber nicht weiß muss halt die DP ran. Ich werde ihm also raten das Array anders zu leeren, ohne FreeAndNil. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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