[BCB]List Index of Bounds

0

Ten błąd dostaję gdy przekroczę index listy (np. przy zabawach z TStringList)... Czy jest jakiś sposób, żeby się tego błędu pozbyć? NIe chodzi mi o nie dopuszczenie do niego, a żeby był, ale user nie dostał o tym informacji...
Jakiś wyjątek? Coś, żeby się nie pojawiał...

PS> try{} catch(...) próbowałem, ale coś nie za zbytnio pomaga...:(

0

try{} catch(...) próbowałem, ale coś nie za zbytnio pomaga...:(

Ale próbowałeś pod BCB, czy odpalając program z eksplorera? Pod BCB błąd otrzymasz zawsze - nieważne, czy użyłeś try catch. To działa jak informacja dla programisty. Natomiast przy try catch błąd nie zostanie pokazany użytkownikowi, jeśli on uruchomi program normalnie pod Windows - a nie F9 w BCB.

0

Tak, nie uruchamiam go z poziomu BCB, bo nie mam takiej możliwości (wtyczka do programu tlen, wykorzystująca jego dość specyficzne API). Ale już zaczynam wątpić, czy obwarowałem (przy pomocy try/catch) wszystkie możliwe miejsca wystąpień tegoż błędu.

0

nie powinno sie dopuszczac do mozliwosci przekorczenia tablicy. zawsze przeciez mozna pobrac jej wielkosc i na tym opierac operacje na tablicach. mozna tylko w programie zabezpieczyc sie przed ewentualnym, przypadkowym wyjsciem poza tablice, co powinno wyjsc w czasie testow i zostac poprawione

0

Masz rację Anonimie szanowny, ale nie do końca... :p
Np. kiedy aplikacja jest dość rozległa i wiele wątków i zdarzeń korzysta z jednej listy nie zawsze jest możliwe ustalenie aktualnej jej długości. Tzn. można ale byłoby to bardzo czasochłonne. Mój program według moich przewidywań powinien działać dobrze 'na laboratoryjnym stole debuggera', jednak kiedy go przenieść w prawdziwe życie współdziałania z PROXY okazuje się, że coś co wcześniej działało, odpada... Niestety...

PS> wiem, że to, że aplikacja odpada w normalnym życiu jest tylko winą programisty, jego przeoczeń i lenistwa, to jednak jak już program ma takie zwyrodnienia przy ok. 700 linii, to ciężko wszystko poprawić... (zajęło by to za dużo czasu, a i tak działało by gorzej niż wcześniej ;P)

<font color="blue">[</span><font color="red">ADD</span><font color="blue">]</span>
Dryobates: Owszem, dopiero się rozkręca (pisałem i po 5000 linii), ale 700 linii to koszmar, gdy źródła brudne i masz dosyć kłopotów z pisaniem tego programu (przynajmniej na jakiś czas) [a szczególnie poprawianie błędów bez debuggera... koszmar] :) Sam zobacz 4p.satelite.zrodla.zip :P

0

Po pierwsze listy typu TStringList zawsze maja zmienna (najczesciej Count), ktora okresla wielkosc tablicy.

Ja doszedlem do pewnego ogolnego wniosku. Zamykac wszystko w klasach. jezeli tablica zostanie zamknieta w klasie to latwo mozna ja obslugiwac. A najlepiej samemu zrobic klase przechowujaca elementy z licznikiem ze wszystkim.

0

to jednak jak już program ma takie zwyrodnienia przy ok. 700 linii, to ciężko wszystko poprawić... (zajęło by to za dużo czasu, a i tak działało by gorzej niż wcześniej ;P)

Bez przesady. 700 linijek to sie dopiero zaczyna program rozkrecac. Takie naduzywanie try..catch to na prawde lenistwo. Sprawdzanie rozmiaru tablic na raczej nie zwolni za bardzo dzialania programu (gdyby mozna bylo pozbyc sie sprawdzania wewnetrznego i zablokowac wywolywanie wyjatku na poziomie listy, to by dopiero dzialalo).
A co do zamykania w klasach, jak to wspomnial kolejny przedmowca: to rozwiazanie jest jak najbardziej wygodne i skuteczne. A najwieksza zaleta to debuggowanie tego :)

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