problem z dynamiczną tablicą

0

Mam sobie taki rekordzik:

type gracz_rekord = record
      login: string[20];
      pass: string[20];
      punkty: integer
    end;

var
  gracz: array of gracz_rekord;

zapelniam sobie teraz te tablice pewnymi danymi (poszerzam ja pobierajac dane z Edit'a):

procedure TMainForm1.ButtonStworzDaneClick(Sender: TObject);
begin

 setLength(gracz, strtoint(EditWielkosc.Text));

 for i:=0 to strtoint(EditWielkosc.Text) do
 begin
  gracz[i].login:='qwert'; //random(100);
  gracz[i].pass:='asdf'; //random(20);
  gracz[i].punkty:=i;
 end;

 LabelStatus.Caption:='Wygenerowano dane...';
end;

Pierwszy problem - jak w tym momencie zamkne program to wywala krytyczny blad "Project rekordy.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. (...)"

O co chodzi? I czemu tak sie dzieje?

EDITED: Juz doszedlem.... Otoz ustawiajac dlugosc tablicy np. 200 tworzymy tablice majaca pola od 0 do 199... Odczytywalem / zapisywalem dane spoza tablicy co moze sie zle czasem skonczyc ^^ Czeba o tym pamietac i zmniejszac wartosci przy odczytywaniu / zapisywaniu o 1.

Pozdrawiam.

0
for i:=0 to strtoint(EditWielkosc.Text) do

w tej linii jest błąd - tablica jest indeksowana od zera do strtoint(EditWielkosc.Text)-1

więc powinno być tak

for i:=0 to strtoint(EditWielkosc.Text)-1 do

1 użytkowników online, w tym zalogowanych: 0, gości: 1