![]() |
kurze Frage: geht record mit dynamischem array?
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:
Der erste Record ist ja ganz normal. Ich kann ohne weitere Umstände auf ihn zugreifen.
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; Den zweiten record würde ich eigentlich genauso benutzen wie den ersten, nur würde ich vor einer Zuweisung auf Feld_3 schreiben:
Delphi-Quellcode:
Genau so würde ich dann auch beim letzten Record vorgehen.
setlength(DynIntRecord.Feld_3,1); // setzt die Länge auf 1
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. |
Re: kurze Frage: geht record mit dynamischem array?
Ja kann man. Es gibt nur Probleme (die du wahrscheinlich in der DP gefunden hast) wenn man Streaming-Funktionen (also TFileStream o.ä.) damit benutzt.
Was deine Exception angeht: Wenn du über die Länge des Arrays hinausschreibst, dann schreibst du halt irgendwohin. Das kann vorerst gut gehen. Aber wenn man etwas überschreibt, was man noch braucht, gibt es später Probleme. Oder du schreibst grad zufällig in einen verbotenen Bereich. Dann gibt es gleich eine Exception. Du kannst im Compiler auch die Bereichsprüfung anschalten, dann bekommst du immer eine Exception. |
Re: kurze Frage: geht record mit dynamischem array?
Ok, dann kann ich meine Arrays ja bedenklos weiter verwenden.
Danke! Stefan. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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-2025 by Thomas Breitkreuz