Was ist in einem dynamischen Array gespeichert, wenn SetLength in Delphi verwendet wird?

8

Ich habe ein dynamisches Array myArr . Was ist im Speicher in myArr gespeichert, wenn wir SetLength darauf verwenden? Ist es "00"? Oder undefiniert?

SetLength weist in diesem Fall 16 Byte Speicher für myArr zu.

%Vor%     
seveleven 21.10.2010, 06:19
quelle

2 Antworten

13

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.

    
Vantomex 21.10.2010, 06:39
quelle
7

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.

%Vor%

Ich nehme an, dass dieses Verhalten in neueren Versionen von Delphi nicht geändert hat.

    
Lieven Keersmaekers 21.10.2010 06:36
quelle

Tags und Links