Einzelnen Beitrag anzeigen

Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.470 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Ein Record 'auf null setzen'

  Alt 28. Jul 2020, 10:57
Default gibt es erst seit neueren Delphi-Versionen. ZeroMemory oder FillChar sind die Funktionen, die man zu Delphi 6 Zeiten verwendet hat und solange man in dem Record keine Managed Types verwendet (String (ShortString oder String[n] ist OK), Interface, dyn. Array), funktioniert das auch super.
Ich hab aber leider dynamische Arrays in meinem Record
Dann solltest Du die vor einem ZeroMemory mittels SetLength(Arrayname, 0) freigeben. Danach ist ein ZeroMemory kein Problem mehr, da intern ein dynamisches Array der Länge 0 ein NIL-Pointer ist, sich also durch ZeroMemory nichts ändert. Dasselbe gilt für AnsiStrings: Auf '' setzen, macht daraus einen NIL-Pointer. Dito Interfaces sollte man direkt auf NIL setzen.

Wichtig ist das wegen des Reference-Countings. ZeroMemory geht an den vom Compiler eingebauten Machanisme für Reference-Counting vorbei und verursacht ggf. spaßige Effekte wie Access Violations.
Thomas Mueller
  Mit Zitat antworten Zitat