wyjątki nie rzucone przez programiste

0

Czy da się jakoś zabezpieczyć program przed wyjątkiem, którego się nie spodziewamy?
Tzn rozumiem że np wczytujemy sobie obrazek nie udało się rzucamy wyjątek przechwytujemy.
Ale taką sytuację przewidzieliśmy. A czy da się w przypadku np takim jak ten, że wyszliśmy poza zakres tablicy (bo np nie przewidzieliśmy że tablica się zmieniła czy coś takiego):

#include<iostream>

int main(int argc, char* argv[])
{
	int tab[3] = {0,1,2};
	try{
		std::cout<<tab[4]<<std::endl;
	}
	catch(...)
	{
		std::cout<<"AAA"<<std::endl;
	}

	return 0;
}

Niestety tu to nie działa. Program się wywala.

0

W tym wypadku możesz sobie stworzyć własny kontener podobny do vectora, tylko z inaczej przeładowanym operatorem [] (który sprawdza zakres), lub używać vectora przez .at(pozycja). Innym rozwiązaniem może być użycie jakiegoś języka, który sprawdza zakres tablicy, lub ma możliwość włączenia tej funkcjonalności, np. Perl, Python, Ruby, Java, C#, Ada, Haskell, D, OCaml, Lisp, Javascript.

0

Przykład tablicy był po prostu pierwszym który mi przyszedł do głowy. Jest tu tylko przykładem.
Chodzi mi o błąd dowolnego typu, którego nie przewidzimy. Czy da się to zabezpieczyć w C++.
Żeby nie mieć wycieku pamięci, tylko żeby ew. posprzątać co się da i wyświetlić chociaż komunikat byle jaki byle nie było takiego chamskiego crasha aplikacji.

0

Możesz spróbować coś pokombinować z sygnałami, ale sam się w to nie bawiłem, jest jednak o tym trochę informacji.

http://stackoverflow.com/questions/2663456/write-a-signal-handler-to-catch-sigsegv
http://stackoverflow.com/questions/1992816/how-to-handle-seg-faults-under-windows

0

No właśnie po to masz catch(...). To łapie wszystko.

Po prostu nie wszystko rzuca wyjątkiem jeżeli stanie się coś złego.

0

Przekroczenie zakresu tablicy, zmiennej i trochę innych rzeczy nie rzuca wyjątkami ze względów wydajnościowych. Jakby miały rzucać wyjątkami, to np. za każdą próbą dostępu do tablicy musiałby być sprawdzany warunek, czy przypadkiem indeks jest w dobrym zakresie. C++ zakłada, że programista wie co robi i to on musi dbać o bezpieczeństwo.
W podanym przez ciebie przypadku zamiast tablicy możesz użyć vectora i funkcji at, która sprawdza przekroczenie zakresu.

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