Zabezpieczenie wyjątku "Segmentation Fault"

0

Cześć,

chcę napisać funkcję, która wykonuje kilka operacji, a w przypadku 'Segmentation Fault' natychmiast ją kończy i wyświetla odpowiedni komunikat? Da się to jakoś zrobić bez masy zabezpieczeń przed przekroczeniem granic vectorów(na nich pracuje), np. catchem?

W tym przypadku C++

1

Jak masz segmentation fault to znaczy że program już zrobił coś bardzo bardzo złego bo nadpisał jakąś pamięć. Szansa że wszystko nadal będzie cudownie działać jest raczej niewielka nawet gdybyś mógł to sobie "złapać". Segmentation fault to nie jest javowy wyjątek rzucony przez asercje przed wykonaniem jakiejś operacji. To jest odpowiedź systemu operacyjnego na wykonanie niepoprawnej operacji na pamięci.

0

Jasne wiem to, chodzi o to, że chciałbym aby w takiej sytuacji program nie krzaczył się całkowicie, tylko dało się wypisać z konsoli odpowiedź "NIE", bo inaczej musiałbym dodać masę ograniczników i liczyłem, że sobie to uproszczę.

4

O.o
Moze po prostu napisz poprawny kod?

0

omg, przeszukuje trzywymiarową tablicę po kątem konkretnego wzoru i jedynym sposobem, żeby nie wyskakiwał segmentation fault jest wypisanie 6 ograniczników pod każdym powtórzeniem w pętli, więc zamiast sprawdzać 100 razy 6 ograniczników, lepiej jest spróbować "ujarzmić" segmentation fault, bo wbrew temu co myślicie, jest on rozwiązaniem problemu.... (Dającym odpowiedź "NIE", ale rozwiązaniem)

Mogę to zrobić klasycznie, ale wydaje mi się że przerwanie programu na skutek uzyskania odpowiedzi w postaci segmentation faulta i przemianowania go na odpowiednie wyjście wydaje mi się bardziej efektowne.

0

Pokaż kod, pewnie da się coś z tym zrobić.

0

Nie mogę pokazać kodu, bo algorytm jest pseudokonkursowy(nie mogę ujawnić przed terminem), ale działa mi opcja podana wyżej i znalazłem i to pod linuxa.Dzięki Vpiotr :)

1

Tylko że nie możesz liczyć że zawsze zadziała, ponieważ jeżeli przydzielisz np char tb[3]; to z bardzo dużym prawdopodobieństwem będziesz mógł bezkarnie używać od tb[0] do tb[7] http://ideone.com/mgMAGz
UWAGA: Nie chodzi mi o to że to dobry kod, jest to UB i może stać się cokolwiek, chodzi jedynie o to że SEH normalnie się nie zdarzy.

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