Witam i mam problem ;) [troche przydługie, ale absurdalnie śmieszne]
Czy istnieje mozliwosć że w kodzie zawartym w try wystąpi błąd, a nie
nastąpi odwołanie do catch (bo mnie się tak dzieje - chociaż sam juz nie
wiem do końca co).
Taki oto kodzik:
<font color="blue">/---------------------------------------------------------------------------
delete[] tab; //na początku jest na null, więc można
tab = NULL;
try {
tab = new int[(do_ilu-od_ilu)+1];
}
catch(...) {
status->Caption="BŁĄD";
blad=1;
}
if (tab==NULL) {
blad=1;
status->Caption="BŁĄD";
}
/---------------------------------------------------------------------------
</span>
Dla danych: od_ilu=100 000, do_ilu=10 000 000 tablica się tworzy i wszyćko
działa
Dla: od_ilu=100 000, do_ilu=100 000 000 brakuje pamięci,
wykonuje
się catch i po kłopocie [i teraz będzie najlepsze]
Dla: od_ilu=100 000, do_ilu=1 000 000 000 oczywista sprawa jest że tez
brakuje pamięci, ale catch się nie wykonuje ;)
Program leci dalej - mija nawet ostateczną barierę if(tab==NULL) i daje
przeróżne błędy i inne syfy.
Może ktoś widzi w tym jakiś sens lub logikę??? - bo ja nie
W akcie depresji do try dodałem: tab[do_ilu-od_ilu]=0; co na szczęście ;);)
dało wyjątek i program się poskromił - ale w programowaniu chodzi o
zapobieganie błędom, a nie o celowe stwarzanie dodatkowych okazji do ich
wystąpienia - na czym to właśnie polegał mój akt desperacji ;).
Tak więc szukam pomysłu na rozwiązanie tego problemu, a swoje już
wyczerpałem z efektami powyższymi...:]
PS: A wywalił wam kiedyś kompilator podczas kompilacji acces violation - bo
ja go przed chwilą do tego doprowadziłem moim cudownym programem ;)
Pozdrawiam