Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EAccessViolation bei Free() (https://www.delphipraxis.net/35152-eaccessviolation-bei-free.html)

jim_raynor 3. Dez 2004 11:48

Re: EAccessViolation bei Free()
 
Zitat:

Zitat von hitzi
Wird's aber nicht :(

Wieso wird das eigentlich so von Borland gelöst.
Wäre ein
Delphi-Quellcode:
Obj.Free;
Obj := nil;
nicht kürzer und schneller?

Ich kann mir nur vorstellen, dass es was mit sicherheit zu tuen hat.

Wenn bei deiner Variante im Destructor ne Exception auftritt (sollte natürlich nicht passieren und weiss auch garnicht was dann passiert) wird die Variable nicht auf nil gesetzt.
Bei der Borland Variante wird die Variable vorher wirklich auf nil gesetzt und dann ist es egal, ob ne Exception auftritt.

Warum bei dir nicht Destroy aufgerufen wird, hat teebee ja schon gesagt. Dadurch das Quasi bei FreeAndNil TObject.Free aufgerufen wird, wird auch nur TObject.Destroy aufgerufen. (Hängt mit der VMT zusammen). Machst du aus dem reintroduce ein override, dann sollte es korrekt funktionieren.

hitzi 3. Dez 2004 12:35

Re: EAccessViolation bei Free()
 
Danke an alle.

Wenn ich's so mache wie's Jim im vorherigen Beitrag geschrieben hat, funktioniert auch FreeAndNil.

Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.
Seite 2 von 2     12   

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