Aus der Delphi 7-Hilfe zitiert: "Für eine Variable mit langem String oder dynamischem Array weist SetLength
den von S referenzierten String oder das Array der angegebenen Länge zu. Vorhandene Zeichen in
Die Zeichenfolge oder die Elemente im Array werden beibehalten, aber der Inhalt des neu zugewiesenen Speicherplatzes ist nicht definiert . Die einzige Ausnahme besteht darin, die Länge eines dynamischen Arrays zu erhöhen, in dem die Elemente Typen sind, die initialisiert werden müssen (Strings, Varianten, Variant-Arrays oder Datensätze, die solche Typen enthalten). Wenn S ein dynamisches Array von Typen ist, die initialisiert werden müssen, wird neu zugewiesener Speicherplatz auf 0
oder nil
gesetzt. "
Aus meiner Beobachtung enthalten nicht initialisierte Elemente für statische Arrays zufällige Daten. Für dynamisches Array, AFAIK seit Delphi 7, enthalten nicht initialisierte Elemente den Wert default nothing . Sie sollten sich jedoch nicht auf diese Tatsache verlassen, da es sich um ein Implementierungsdetail von SetLength
handelte. Sie sollten stattdessen die offizielle Dokumentation befolgen.
In der Praxis wird es mit Nullen initialisiert.
Die Methode SetLength
ruft intern System.DynArraySetLength
auf.
Mit Delphi 5
wird der Speicher mit #0
gefüllt.
Ich nehme an, dass dieses Verhalten in neueren Versionen von Delphi nicht geändert hat.