Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Verhalten von Array of Records (https://www.delphipraxis.net/202552-verhalten-von-array-records.html)

MicMic 16. Nov 2019 12:48

Verhalten von Array of Records
 
Hallo,
ich teste gerade ein wenig rum und versteh mal wieder Bahnhof :) :)
Hier mal abgekürzt (in meinem Record ist noch mehr drin).
Delphi-Quellcode:
TTestRecord = Record
                Nr : Integer;
                ONr : Integer;
              End;

TestList = Array of TTestRecord;

Var Test : TestList;
    Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var f : integer;
begin
 setLength(test,2);
 test[0].Nr := 3;
 test[1].Nr := 3;

 try
   f:= test[4281].Nr;
   caption := inttostr(f);
 except
       caption := 'fehler';
 end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 finalize(test);
end;
Gerade hier gibt mir "test[4281]" eine Nummer (132272) raus. Wobei eigentlich doch "fehler" ausgegeben werden sollte. Erhöhe ich die Zahl (6stellig) bekomme ich "fehler", sonst bei vielen anderen Zahlen meist "0" zurück geliefert. Sollte aber nicht ab "test[2] immer "fehler" ausgegeben werden?

Uwe Raabe 16. Nov 2019 13:18

AW: Verhalten von Array of Records
 
Schalte mal bei den Compiler-Optionen die Bereichsprüfung ein.

MicMic 16. Nov 2019 13:40

AW: Verhalten von Array of Records
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1451420)
Schalte mal bei den Compiler-Optionen die Bereichsprüfung ein.

Habe ich eben gemacht (Projektoptionen / Compilieren / Laufzeitfehler > Bereichsprüfung auf True) bei Delphi 10.3
Aber es ändert sich nichts. Nur mal als Beispiel: Prüfe ich auf "f:= test[428100].Nr" dann bekomme ich "fehler" ausgespuckt oder wenn ich es mit Debug starte, dann einen Dialog mit Klasse ERageError mit der Meldung "Fehler bei Bereichsprüfung". Die bekomme ich aber auch, wenn ich die Bereichsprüfung auf False habe (also in Projektoptionen / Compilieren / Laufzeitfehler).

Bei kleineren Werten:
f:= test[40].Nr (Ergebnis 5)
f:= test[41].Nr (Ergebnis 7143538)
f:= test[200].Nr (Ergebnis 0)
f:= test[310].Nr (Ergebnis 0)

Nach meinem Verständnis sollte ab "f:= test[2].Nr" eigentlich immer "fehler" ausgegeben werden bzw. mit Debug immer so ein ERageError Dialog kommen.

ghubi01 16. Nov 2019 13:53

AW: Verhalten von Array of Records
 
Hallo,

Du musst nach jedem Umschalten der Bereichsprüfung (True/False) das Projekt erzeugen oder eine Syntaxprüfung durchführen.
Nur dann ist die Bereichsprüfung auch wirksam.

MicMic 16. Nov 2019 13:57

AW: Verhalten von Array of Records
 
Ja, eben mal etwas rumgetestet. Also auf 32 zu 64 Bit gewechselt. Dann hat es funktioniert. Zurück auf 32 Bit. Dann hat es auch funktioniert, da Delphi wohl dadurch das Projekt neu gemacht hat, also dein Tipp dann angewendet wurde. :) Danke für die Info.

stahli 22. Nov 2019 09:24

AW: Verhalten von Array of Records
 
"Projekt compilieren" lässt ggf. Units aus, wenn keine Veränderungen darin erkannt werden.

"Projekt erzeugen" sollte immer funktionieren.
Dies erzwingt eine Neucompilierung aller Units.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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