AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Repeat until high(Array) Problem

Ein Thema von Edelfix · begonnen am 10. Sep 2019 · letzter Beitrag vom 11. Sep 2019
Antwort Antwort
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
230 Beiträge
 
Delphi 10.4 Sydney
 
#1

Repeat until high(Array) Problem

  Alt 10. Sep 2019, 07:26
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;
Angehängte Grafiken
Dateityp: jpg 10-09-_2019_08-19-59.jpg (67,1 KB, 38x aufgerufen)

Geändert von Edelfix (10. Sep 2019 um 08:00 Uhr)
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#2

AW: Repeat until high(Array) Problem

  Alt 10. Sep 2019, 07:44
Initialisiere das Array doch erstmal vor der Schleife.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
230 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Repeat until high(Array) Problem

  Alt 10. Sep 2019, 08:02
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.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: Repeat until high(Array) Problem

  Alt 10. Sep 2019, 08:07
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.
Leider falsch.

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).
2019-09-10 09_13_55-Repeat-CPU.png
Jetzt bekommt man auch eine Ahnung, warum in der Zeile mit dem until kein Breakpoint gesetzt werden kann.
Eine weitere Ahnung beschleicht einen, wenn man dann einen Breakpoint auf die Zeile mit dem repeat setzt. Wenn das Programm dort jetzt zum ersten Mal anhält, dann hat das Array schon eine Länge von 1.

Kleines Schmankerl noch zum Schluss:

Schau dir mal die blauen Punkte bei diesem Code an
Delphi-Quellcode:
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;
Die Zeile mit dem until hat jetzt einen blauen Punkt, dafür aber die Zeile mit dem repeat nicht mehr

Geändert von Schokohase (10. Sep 2019 um 08:25 Uhr)
  Mit Zitat antworten Zitat
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#5

AW: Repeat until high(Array) Problem

  Alt 10. Sep 2019, 08:24
müsste es nicht so sein?

until (length(aArray) >= 5); Gruß LoZe
Chris
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Repeat until high(Array) Problem

  Alt 10. Sep 2019, 08:27
müsste es nicht so sein?

until (length(aArray) >= 5); Gruß LoZe
Der Original-Code fragt ab, ob der höchste Index des Arrays größer oder gleich 5 ist. Da der Array-Index 0-basierend ist, müssten wir analog abfragen until (length(aArray) >= 6); .

Also lautet die Antwort auf deine Frage: Nein!
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:52 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