W poniższym kodzie, przy pierwszej iteracji otrzymuję wyjątek, aw drugim otrzymuję błąd segmentacji bez drukowania komunikatu o błędzie. Wygląda na wyjątek:Otrzymuję błąd segmentacji zamiast wyjątku
int i = 0;
while(i++ < 10)
{
try {
cout << "Iteration: " << i << endl;
// Code...
cout << "OK" << endl;
}
catch(...)
{
cerr << "Error message" << endl;
continue;
}
}
Output:
Iteration 1
Error message
Iteration 2
Segmentation fault
Czy to normalne, czy dzieje się coś naprawdę złego?
Jeśli to powinno być istotne, w tym bloku kodu zresetowałem połączenie MySQL, a wyjątek zostanie wygenerowany, gdy sprawdzę, czy połączenie jest zamknięte.
Dziękuję.
Platforma:
Linux - openSUSE 11.4
C++ - GCC 4.5.1
Intel Xeon
błędów segmentacji. nie zostanie złapany przez "try-catch", zamiast tego należy użyć debuggera: –
Jestem prawie pewny, że musi on znajdować się w twoim '// Code ...'. Nie można wykryć miejsc, w których wystąpił błąd. .. – kratenko
Udało mi się zduplikować twoje wyjście, pisząc 'if (i == 1) throw 0; else i = * (int *) 0;' ale to nie jest to, co robi twój '// Code', czy jest to? –