AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi kurze Frage: geht record mit dynamischem array?

kurze Frage: geht record mit dynamischem array?

Ein Thema von changlee · begonnen am 30. Nov 2008 · letzter Beitrag vom 30. Nov 2008
Antwort Antwort
changlee
(Gast)

n/a Beiträge
 
#1

kurze Frage: geht record mit dynamischem array?

  Alt 30. Nov 2008, 09:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: kurze Frage: geht record mit dynamischem array?

  Alt 30. Nov 2008, 09:39
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#3

Re: kurze Frage: geht record mit dynamischem array?

  Alt 30. Nov 2008, 09:54
Ok, dann kann ich meine Arrays ja bedenklos weiter verwenden.
Danke!
Stefan.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz