ďťż

Ładny brzuch

Jaki jest bład w kodzie:
procedure TglownaForm.WczytajTesty; begin  ini:=tinifile.Create(extractfilepath(application.exename)+'testy.ini') ;    try    liczbatestow:=Ini.ReadInteger('ogolne','liczbatestow',liczbatestow) ;    finally    end;  if liczbatestow <= 0 then  begin    ShowMessage('W programie nie ma żadnego testu. Program zostanie zamknięty!');  glownaform.Hide;  end  else    begin    for i:=1 to liczbatestow do    begin      s:='test'+inttostr(i);        try        begin        testy[i]:=Ini.ReadString(s,'nazwa',testy[i]);        end;        finally        Ini.Free;        end;    testylistbox.items.Add(testy[i]);    end;  end; end;

bo wyskakuje bład:
Access violation at adresse 0045985E in module 'test.exe'. Read of adresse 00000004



Mozliwości:
1. tablica testy - i > rozmiaru tej tablicy
2. Bardziej prawdopodobne - ini za wcześnie zwalniane - bo już po pierwszym przebiegu pętli ...


Mozliwości:
1. tablica testy -  i > rozmiaru tej tablicy
2. Bardziej prawdopodobne - ini za wcześnie zwalniane  - bo już po pierwszym przebiegu pętli ...

Przecież nic nie zmieniłeś tak naprawdę ... Dalej Ini jest zwalniane po pierwszym przebiegu pętli ... Ini zwolnij poza pętlą for ... czyli
for i := 1 to costam do begin try  // czytaj z ini i cośtam jeszcze rób except  ShowMessage('Jakieś błędy o odczycie ini albo  przy "cośtam jeszcze"');  Break; end; end; Ini.Free;




Przecież nic nie zmieniłeś tak naprawdę ... Dalej Ini jest zwalniane po pierwszym przebiegu pętli ... Ini zwolnij poza pętlą for ... czyli
for i := 1 to costam do begin try  // czytaj z ini i cośtam jeszcze rób except  ShowMessage('Jakieś błędy o odczycie ini albo  przy "cośtam jeszcze"');  Break; end; end; Ini.Free;

Jak masz zadeklarowaną zmienną testy ??


Jak masz zadeklarowaną zmienną testy ??


testy:array of string;

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •