Hallo,
ich bin gerade etwas verunsichert. Hier im Forum habe ich ein paar Beiträge gefunden, die darauf hindeuten, dass man kein dynamisches Array in ein record packen sollte. (Zumindest nicht ohne weitere Maßnahmen).
Ich habe daraufhin getestet und konnte keine Fehler festsellen. Möglicherweise war mein Test jedoch nicht representativ.
Also hier jetzt um sicher zu gehen:
Delphi-Quellcode:
TNormalRecord = record
Feld_1 : integer;
Feld_2 : string;
end;
TDynIntRecord = record
Feld_1 : integer;
Feld_2 : string;
Feld_3 : array of integer;
end;
TDynIntStrRecord = record
Feld_1 : integer;
Feld_2 : string;
Feld_3 : array of integer;
Feld_4 : array of string;
end;
Der erste Record ist ja ganz normal. Ich kann ohne weitere Umstände auf ihn zugreifen.
Den zweiten record würde ich eigentlich genauso benutzen wie den ersten, nur würde ich vor einer Zuweisung auf Feld_3 schreiben:
setlength(DynIntRecord.Feld_3,1); // setzt die Länge auf 1
Genau so würde ich dann auch beim letzten Record vorgehen.
So hat es in meinen Tests zumindest funktioniert. Das einzige was seltsam war: Ich habe mal auf einen Array-Index zugegriffen, der außerhalb der gesetzten Länge lag und trotzdem keine
Exception bekommen. Stattdessen habe ich (im Integer Array) eine Null zurückbekommen.
Ein anderes Mal bekam ich hingegen eine
Exception. Ich weiß nicht was bei den beiden Aufrufen untershiedlich war.
Kann ich meine Arrays so nutzen, wie ich sie oben aufgeschrieben habe?
Gruß
Stefan.