Allez-y et vous inquiétez pas. Le CRT devrait émuler signal() mais le MSVC mentionne explicitement que longjmp() n'est pas légal dans un gestionnaire à moins qu'il ne gère SIGFPE. Vérifiez le vôtre.
L'équivalent de SIGSEGV est une exception SEH avec le code d'exception 0xc0000005 (STATUS_ACCESS_VIOLATION). Le compilateur MSVC permet de les attraper avec les mots-clés __try et __except.
L'idée de "protéger" un module comme celui-ci est profondément erronée. L'état de votre programme est corrompu irréparable, vous n'avez aucune idée de la façon dont il a été muté de sorte que vous n'avez aucune chance de le restaurer. Continuer à courir peut causer un certain nombre de mésaventures. Vous serez chanceux quand il mourra sur une autre exception, ne vous donnant aucune idée de ce que le vrai problème était, mais il est plus susceptible de générer simplement de mauvaises données qui ne seront pas diagnostiquées pendant longtemps. Il vaut mieux ne pas écrire du code comme ça. Et résolvez votre problème de portage dans le processus.
Merci pour le message. Je vais essayer d'utiliser __try et __except. J'utilisais un try and catch (à partir de C++), mais ça ne faisait pas la magie que je voulais. – vy32
En règle générale, les problèmes rencontrés ne sont pas des erreurs d'écriture, mais plutôt des erreurs de lecture. Ils sont le plus souvent causés car un décodeur fait confiance à une valeur de pointeur qui ne devrait pas l'être. Je sais que cette approche est profondément erronée, mais elle est malheureusement meilleure que l'alternative. – vy32
Le suivi - __try et __except ne fonctionnent pas sous mingw, mais SIGSEGV est intercepté avec mingw avec signal(). – vy32