![]() |
Repeat until high(Array) Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin gestern über ein merkwürdiges Verhalten gestolpert. In eine repeat until Schleife wurde im until Bereich mit high(aArray)>1 geprüft. Der Compiler hat die until Prüfung einfach nicht gemacht und schon hatte ich eine Endlos Schleife. Hier ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aArray: Array of String; begin SetLength(aArray, length(aArray)+1); repeat SetLength(aArray, length(aArray)+1); until (high(aArray) >= 5); end; |
AW: Repeat until high(Array) Problem
Initialisiere das Array doch erstmal vor der Schleife.
|
AW: Repeat until high(Array) Problem
Darum geht es nicht. Es nur ein kurzes Beispiel. Es geht darum das bei until kein Blauer Punkt ist. Also wird die Zeile nicht ausgeführt.
|
AW: Repeat until high(Array) Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Kein blauer Punkt => Kein Breakpoint setzbar. Es sagt leider nichts darüber aus, ob das ausgeführt wird oder nicht. Somit ein Bug der gefixt werden sollte. Ob da was ausgeführt wird oder nicht siehst du aber in der CPU-Ansicht. Breakpoint auf SetLength und dann in die CPU-Ansicht wechseln. Dort sieht man dann, wo (und ob) der Vergleich stattfindet (habe ich dir mal gelb markiert). Anhang 51627 Jetzt bekommt man auch eine Ahnung, warum in der Zeile mit dem
Delphi-Quellcode:
kein Breakpoint gesetzt werden kann.
until
Eine weitere Ahnung beschleicht einen, wenn man dann einen Breakpoint auf die Zeile mit dem
Delphi-Quellcode:
setzt. Wenn das Programm dort jetzt zum ersten Mal anhält, dann hat das Array schon eine Länge von 1.
repeat
Kleines Schmankerl noch zum Schluss: Schau dir mal die blauen Punkte bei diesem Code an
Delphi-Quellcode:
Die Zeile mit dem
procedure TForm1.Button1Click(Sender: TObject);
var aArray: Array of String; function IsFinished(): Boolean; begin Result := (high(aArray) >= 5); end; begin repeat SetLength(aArray, length(aArray) + 1); until IsFinished(); end;
Delphi-Quellcode:
hat jetzt einen blauen Punkt, dafür aber die Zeile mit dem
until
Delphi-Quellcode:
nicht mehr
repeat
|
AW: Repeat until high(Array) Problem
müsste es nicht so sein?
Delphi-Quellcode:
Gruß LoZe
until (length(aArray) >= 5);
|
AW: Repeat until high(Array) Problem
Zitat:
Delphi-Quellcode:
.
until (length(aArray) >= 6);
Also lautet die Antwort auf deine Frage: Nein! |
AW: Repeat until high(Array) Problem
Schokohase hat Recht. In dem kleinen Beispiel wird until doch ausgeführt obwohl kein blauer Punkt zu sehen ist.
Bedeutet dass mein Beispiel leider nicht so gut ist. Im konkreten Fall hat ein Kunde sich beschwert das die Ausgabe nach Excel nicht mehr funktioniert. Mit dem Debugger habe ich dann gesehen das die Ausgabe in eine Endlos Schleife Excel vollgemacht hat. Ich habe erst einmal den high Wert einer lokalen Variable zugewiesen und diese dann im until angefragt. Jetzt ist der Kunde erst einmal Glücklich aber ich habe Angst das es noch weitere Stellen gibt wo änliches auftreten kann. Leider kann ich den Original Quelltext hier nicht posten. |
AW: Repeat until high(Array) Problem
Zitat:
![]() |
AW: Repeat until high(Array) Problem
Ich seh es nicht. :shock:
Was war am Originalcode falsch? |
AW: Repeat until high(Array) Problem
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 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