Lazarus: Access Violation i SIGSEGV przy wczytywaniu z pliku

0

Podczas wczytywania danych z pliku program wiesza się, po naciśnięciu na formę wyskakuje w Access Violation lub (jeśli używam odpluskwiacza) External: SIGSEGV. Nie wiem dlaczego, podaję kod procedury:

procedure TTeamFile.ReadTeam(filename: string);
var
   Stm: TStream;
   i,a: integer;
begin
   Stm:=TFileStream.Create(filename,fmOpenRead);
   Writeln(ft,'Created Stream OK');
   Stm.seek(0,sobeginning);
   stm.ReadByte;
   FTeamsInx:=Stm.ReadByte;
   Writeln(ft,'Teams in file: '+(inttostr(FTeamsInx)));
   For i:=0 to (FTeamsinx-1) do BEGIN
     SetLength(teams,Fteamsinx);
     teams[i]:=TTeam.Create;
     Writeln(ft,'Team nr '+inttostr(i)+' created ok');
     teams[i].nar:=stm.ReadByte;
     teams[i].nrk:=stm.ReadByte;
     teams[i].nro:=stm.ReadWord;
     stm.readbyte;
     stm.Read(teams[i].fname,sizeof(teams[i].fname));
     Writeln(ft,'Team nr '+inttostr(i)+' name '+teams[i].TeamName);
     stm.readbyte;
     stm.readbyte;
     stm.readbyte;
     teams[i].ust:=stm.ReadByte;
     teams[i].leg:=stm.ReadByte;
     teams[i].hr1:=stm.readbyte;
     teams[i].hkk1:=stm.readbyte;
     teams[i].hkk2:=stm.readbyte;
     teams[i].hks:=stm.readbyte;
     teams[i].hkg:=stm.readbyte;
     teams[i].ar2:=stm.readbyte;
     teams[i].akk1:=stm.readbyte;
     teams[i].akk2:=stm.readbyte;
     teams[i].aks:=stm.readbyte;
     teams[i].akg:=stm.readbyte;
     stm.Read(teams[i].tren,sizeof(teams[i].tren));
     stm.readbyte;
     stm.readbyte;
     stm.Read(teams[i].ustw,sizeof(teams[i].ustw));
     For a:=0 to 15 do BEGIN
       teams[i].gracz[a]:=Tplayer.Create;
       Writeln(ft,'Player nr '+inttostr(a)+' created ok');
       teams[i].gracz[a].nar:=stm.ReadByte;
       stm.ReadByte;
       teams[i].gracz[a].nrz:=stm.ReadByte;
       stm.Read(teams[i].gracz[a].fname,sizeof(teams[i].gracz[a].fname));
       Writeln(ft,'Player nr '+inttostr(a)+' name '+teams[i].Player[a].PlayName);
       stm.ReadByte;
       teams[i].gracz[a].poz:=stm.readbyte;
       stm.readbyte;
       teams[i].gracz[a].xp:=stm.readbyte;
       teams[i].gracz[a].vh:=stm.readbyte;
       teams[i].gracz[a].tc:=stm.readbyte;
       teams[i].gracz[a].sf:=stm.ReadByte;
       teams[i].gracz[a].val:=stm.ReadByte;
       stm.readbyte;
       stm.readbyte;
       stm.readbyte;
       stm.readbyte;
       stm.readbyte;
     end;
   end;
   stm.free;
end;  

Plik loga tworzonego przez procedurę w załączniku.

Przerobiłem to i skompilowałem pod Delphi i wszystko jest ok. Działa jak trzeba.
Dane do przedostatniego player'a wczytywane są poprawnie.
Dlaczego pod Lazarusem wyskakuje błąd?

1

Dlaczego pod Lazarusem wyskakuje błąd?

Bo pewnie masz debug załączony, sprawdź debuggerem, przecież jest. Call stack podaj.

0

Dopiero jak sprawdziłem call stack zorientowałem się że nie usunąłęm procedury ze zdarzenia OnClick. To ona powodowała błąd. Dzięki -123 za odpowiednie nakierowanie.

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