blad "List index out of bounds"

0

Czesc wszystkim :)
mam takie cos w kodzie:

procedure TForm1.Timer1Timer(Sender: TObject);
var i,l:integer;
begin
for i:=1 to il do
if uzytkownicy[i].pong=false then
begin
for l:=i to il do uzytkownicy[l]:=uzytkownicy[l+1]; //kasowanie uzytkownika ktory nie odpowiedzial
end;

for i:=0 to il-1 do ServerSocket1.Socket.Connections[i].SendText('#PING@'+#10+#13);
for i:=1 to il do uzytkownicy[i].pong:=false;
end;

co mam zrobic aby nie wywalalo bledu typu: "List index out of bounds (1)" ??

0

Prawdopodobnie w il wszędzie ma być -1 a w tym kasowaniu il-2

0

probowalem juz tego wczesniej ale to tez nic nie daje. Jak tak zrobie to wywala mi znow blad tylko ze z zerem w nawiasie :) "List index out of bounds (0)"

0

Głowy ściąć nie dam, bo nie wiem, co trzymasz w il, ale prawdopodobnie masz tam ilość elementów, więc il+1 poprawne raczej nie jest...
Btw. moim zdaniem, ten kod nie będzie spełniał swojego zadania...
//A tak jeszcze na marginesie - w nawiasie masz właśnie numer elementu, przez który jest błąd [tzn. np. jak 0 - to nie ma w ogóle żadnych elementów, jak 1 - nie ma elementu o indeksie 1]

0

Sasik, twoim zdaniem jak powinienem zmodyfikowac ten kod powyzej?

a blad jest prawdopodobnie i chyba na 100% w tej linii:

for i:=0 to il-1 do ServerSocket1.Socket.Connections[i].SendText('#PING@'+#10+#13);

bo jak dalem ta linie w komentarz wszystko bylo dobrze :-| :-/

0
procedure TForm1.Timer1Timer(Sender: TObject);
var i,l:integer;
begin
  i:=1;
  while(i<=il)do
    if(uzytkownicy[i].pong) 
      then inc(i)
      else
        begin
          for l:=i to il-1 do uzytkownicy[l]:=uzytkownicy[l+1]; // Chcesz wyjśc poza tablicę? po co?
          uzytkownicy[il].pong:=false; // nie musi byc, ale może;
          dec(il); // przecież zmniejszasz liczbę użytkowników
        end;

  for i:=0 to il-1 do ServerSocket1.Socket.Connections[i].SendText('#PING@'+#10+#13);
  for i:=1 to il do uzytkownicy[i].pong:=false;
end;

chyba na 100%
dobry text, na prawdę dobry (czyli ile - 70%?)

Program wykrzaczył się w tej linii, efekt błędu, który był wcześniej.
I nauczcie sie w końcu formatować przynajmniej źródło, bo to bardzo poprawia czytelność.

// btw. while i repeat/until - te pętle sa dużo bardziej elastyczne od fora.

// albo trzy minuty bez odpluskwiacza ;p łącznie z poprawkami.

0

czemu wy macie taki wstręt do debugera? 15 minut pracy nad programem odpalonym w trybie krokowym i byś rozwiązał problem sam.
grrrrr.....

0

dzieki :)))
obiecuje ze nastepnym razem pobawie sie debugerem ;) [hurra]
browarek dla was [browar] :)

0

browarek dla was [browar] :)

Jeden na dwóch? Na dwóch studentów? Kpisz, czy o droge pytasz ;p ?

// niezamaco
// ja biorę prawą połówkę ;-) - ŁF
// ale ja piję pierwszy - wszystko co po lewej ;p

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