J'utilise ncurses et chaque fois que je reçois un segfault, ncurses ne libère pas correctement le contrôle du terminal (car endwin() n'a jamais été appelé). Je mis en place un gestionnaire de signal:Enfin un bloc pour les erreurs de segmentation (C++)
void handler(int signum) {
endwin();
exit(EXIT_FAILURE);
}
mais le problème est que le segfault est ignoré, par opposition à un retard jusqu'à ce endwin(). Je suis assez nouveau pour C++; les segfaults peuvent-ils être pris comme des exceptions, pour que je puisse avoir un bloc finally? Ou est-il possible de renvoyer la segfault depuis l'intérieur du gestionnaire?
duplication possible de [Comment attraper la faute de segmentation sous Linux?] (Http://stackoverflow.com/questions/2350489/how-to-catch-segmentation-fault-in-linux) – casablanca
Juste par intérêt, que arrive si vous mettez un point d'arrêt dans le gestionnaire de signal? Gdb peut-il revenir au contexte de la segfault originale alors? –
C++ n'a pas de blocs finally. Utilisez une classe de sentinelle, dont le destructeur appelle endwin(); –