Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi "Index der Liste überschreitet das Maximum (110)" Warum? (https://www.delphipraxis.net/187760-index-der-liste-ueberschreitet-das-maximum-110-warum.html)

felix00186 31. Dez 2015 12:42

"Index der Liste überschreitet das Maximum (110)" Warum?
 
Moin!
Ich hoffe, ich bin in diesem Forum richtig. Ich bin gerade dabei, ein Fußball-Managerspiel zu programmieren. Beim Programm gibt es erst ein Fenster, in dem man einen neuen Spielstand erstellen oder einen alten laden kann.
Das eigentliche Spielfenster überprüft durch die Länge der Spielstand-Datei, ob das ein neuer oder ein alter Spielstand ist. Wenn es ein neuer ist, soll das Programm mit eine Procedure 11 Spieler erstellen und die Daten der Spieler in verschiedene Arrays packen. Seit Stunden hänge ich aber nun an folgender Fehlermeldung:

Zitat:

Der Index der Liste überschreitet das Maximum (110)
Diese Meldung scheint immer nach einer bestimmten Anzahl von Befehlen zu kommen. Wenn ich mit // ein paar Zeilen rausnehme, dann wird der Fehler ein paar Zeilen weiter angezeigt. Das kann doch aber eigentlich nicht sein, dass das Programm nach einer Weile einfach keine Lust mehr hat. Ich habe nun einen Button hinter einem Panel versteckt und bei Form3.activate geschrieben: "Button1.click". Der Rest geht dann über Form3.Button1Click weiter. Aber bei Button2 ist dann schon nach 3 Zeilen Schluss und außerdem kann das ja auch nicht die Lösung des Problems sein, versteckte Buttons einzubauen.
Wie gesagt, mir scheint es so, als wenn das Programm nur eine bestimmte Anzahl von Befehlen abarbeiten kann, aber das darf ja nicht sein und das war ja auch vorher nie so.

Kann mir vielleicht jemand helfen? Ich bin noch eher Anfänger und programmiere mit dem uralten Delphi 5.
Vielen Dank!

Lemmy 31. Dez 2015 12:47

AW: "Index der Liste überschreitet das Maximum (110)" Warum?
 
Willkommen,

die Fehlermeldung sagt schlicht, dass Du bei einer Liste auf ein Element zugreifst, das es nicht gibt. Dafür gibt es viele Ursachen. Am einfachsten ist es, wenn Du dein komplettes Projekt (*.dpr, *.pas *.dfm.... aber ohne *.exe und ohne *.dcu) zipst und hier anhängst. Ohne Code ist hier eine Fehlersuche wie stochern im Nebel.

Ich bin für heute aber raus :-)

felix00186 31. Dez 2015 12:52

ZIP-Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist alles in einer ZIP-Datei.
Es kommt mir aber ziemlich komisch vor, dass sich der Fehler immer um so viele Zeilen verschiebt, wie ich mit // rausnehme. Sogar bei "end;" war angeblich schon mal der Fehler.

Das betrifft die Unit 3 im Zip-Ordner.

Guten Rutsch euch allen!

Bjoerk 31. Dez 2015 13:00

AW: "Index der Liste überschreitet das Maximum (110)" Warum?
 
Nimm mal das Spiel := TStringList.create aus der Button1Click heraus?
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
  Spiel := TStringList.create;
  ..
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
  Spiel.Free;
end;

SProske 31. Dez 2015 13:13

AW: "Index der Liste überschreitet das Maximum (110)" Warum?
 
Delphi-Quellcode:
vorzeile:=Random(vornamen.count+1)+1;
     vorname:=vornamen[vorzeile];
Sieht potentiell gefährlich aus:
Hätte die Stringliste Vornamen genau 3 Elemente, würdest du Zufallszahlen von 0-3 Erzeugen und dazu 1 Addieren, also Zahlen von 1-4 in vorzeile stehen.
Die Stringliste hat aber nur die Indices 0,1,2 - bei 3 oder 4 würde es also immer zu der Index-Fehlermeldung kommen, während der Index 0 nie angesprungen würde.

Delphi-Quellcode:
vorzeile:=Random(vornamen.count);
     vorname:=vornamen[vorzeile];
Sollte korrekt sein.

felix00186 1. Jan 2016 16:19

AW: "Index der Liste überschreitet das Maximum (110)" Warum?
 
Zitat:

Zitat von SProske (Beitrag 1325733)
Delphi-Quellcode:
vorzeile:=Random(vornamen.count+1)+1;
     vorname:=vornamen[vorzeile];
Sieht potentiell gefährlich aus:
Hätte die Stringliste Vornamen genau 3 Elemente, würdest du Zufallszahlen von 0-3 Erzeugen und dazu 1 Addieren, also Zahlen von 1-4 in vorzeile stehen.
Die Stringliste hat aber nur die Indices 0,1,2 - bei 3 oder 4 würde es also immer zu der Index-Fehlermeldung kommen, während der Index 0 nie angesprungen würde.

Delphi-Quellcode:
vorzeile:=Random(vornamen.count);
     vorname:=vornamen[vorzeile];
Sollte korrekt sein.

Vielen Dank, daran lag es! :thumb:

felix00186 1. Jan 2016 16:21

AW: "Index der Liste überschreitet das Maximum (110)" Warum?
 
Zitat:

Zitat von Bjoerk (Beitrag 1325731)
Nimm mal das Spiel := TStringList.create aus der Button1Click heraus?
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
  Spiel := TStringList.create;
  ..
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
  Spiel.Free;
end;

Dir auch vielen Dank! Das stimmt, die Stringlist spiel wurde wirklich mehrmals erstellt. Jetzt funktioniert das Programm endlich bis zu diesem Punkt und ich kann weitermachen. Warum der Fehler an total unterschiedlichen Stellen angezeigt wurde, die damit so gut wie nichts zu tun haben, weiß ich immer noch nicht, aber ist ja auch egal.


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