![]() |
Delphi-Version: 6
Ein Record 'auf null setzen'
Hallo, ich benutze einen Record immer wieder in einer Schleife, wie setze ich es auf null bzw. lösche dort alle werte richtig, bevor ich es neu beschreibe?
ZeroMemory(@MyRecord,SizeOf(MyRecord)); habe ich gefunden, es gibt aber auch die Funktion Default, aber da weiß ich nicht ob es mit Delphi 6 läuft. Thx |
AW: Ein Record 'auf null setzen'
Zitat:
|
AW: Ein Record 'auf null setzen'
Zitat:
|
AW: Ein Record 'auf null setzen'
Delphi-Quellcode:
kann bei dyn. Arrays helfen.
SetLength()
|
AW: Ein Record 'auf null setzen'
Hallo,
Automatismen sind schön und gut, aber manchmal können Null-Werte einer Variablen numerische Probleme bei den nachfolgenden Berechnungen verursachen. Daher verwende ich nach / anstelle
Delphi-Quellcode:
oder
ZeroMemory(@MyRecord,SizeOf(MyRecord));
Delphi-Quellcode:
oder
Result:= Default(MB_Record);
Delphi-Quellcode:
etc. stets eigene Proceduren, die die kritischen Variablen auf "ungefährliche" oder "sinnlose" Werte setzt. Dazu habe ich für die meisten Datentypen eine überladene Funktion namens Sinnlos deklariert, die den jeweiligen Variablen die passenden Werte zuweist:
FillChar(Result, SizeOf(Result), 0);
Delphi-Quellcode:
Gruß, Andreas
Function Sinnlos: Extended; Overload;
Begin Result:= ... ; // wie +/-Unendlich, NaN, negativ, MaxExtended etc. End; |
AW: Ein Record 'auf null setzen'
Zitat:
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. |
AW: Ein Record 'auf null setzen'
Sind da gemangtae Typen im Record?
Strings, Interfaces usw.? Dann vor dem Zero unbedingt ein Finalize (FinalizeArray mit Count=1 oder FinalizeRecord, sie System-Unit) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 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