Exemple
int *ptr;
*ptr = 1000;
Puis-je attraper une exception de violation d'accès à la mémoire en utilisant le C++ standard sans utiliser de logiciel spécifique à Microsoft ?
Exemple
int *ptr;
*ptr = 1000;
Puis-je attraper une exception de violation d'accès à la mémoire en utilisant le C++ standard sans utiliser de logiciel spécifique à Microsoft ?
Comme indiqué, il n'y a pas de moyen autre que Microsoft ou le fournisseur de compilateurs pour faire cela sur la plate-forme Windows. Cependant, il est évidemment utile d'attraper ces types d'exceptions dans la méthode normale try { } catch (exception ex) { } pour le signalement des erreurs et une sortie plus gracieuse de votre application (comme le dit JaredPar, l'application est maintenant probablement en difficulté). Nous utilisons _se_translator_function dans un simple wrapper de classe qui nous permet d'attraper les exceptions suivantes dans un try handler :
DECLARE_EXCEPTION_CLASS(datatype_misalignment)
DECLARE_EXCEPTION_CLASS(breakpoint)
DECLARE_EXCEPTION_CLASS(single_step)
DECLARE_EXCEPTION_CLASS(array_bounds_exceeded)
DECLARE_EXCEPTION_CLASS(flt_denormal_operand)
DECLARE_EXCEPTION_CLASS(flt_divide_by_zero)
DECLARE_EXCEPTION_CLASS(flt_inexact_result)
DECLARE_EXCEPTION_CLASS(flt_invalid_operation)
DECLARE_EXCEPTION_CLASS(flt_overflow)
DECLARE_EXCEPTION_CLASS(flt_stack_check)
DECLARE_EXCEPTION_CLASS(flt_underflow)
DECLARE_EXCEPTION_CLASS(int_divide_by_zero)
DECLARE_EXCEPTION_CLASS(int_overflow)
DECLARE_EXCEPTION_CLASS(priv_instruction)
DECLARE_EXCEPTION_CLASS(in_page_error)
DECLARE_EXCEPTION_CLASS(illegal_instruction)
DECLARE_EXCEPTION_CLASS(noncontinuable_exception)
DECLARE_EXCEPTION_CLASS(stack_overflow)
DECLARE_EXCEPTION_CLASS(invalid_disposition)
DECLARE_EXCEPTION_CLASS(guard_page)
DECLARE_EXCEPTION_CLASS(invalid_handle)
DECLARE_EXCEPTION_CLASS(microsoft_cpp)
Le cours original provient de cet article très utile :
Une violation de ce type signifie que le code présente un sérieux problème et qu'il n'est pas fiable. Je peux comprendre qu'un programme puisse vouloir essayer de sauvegarder les données de l'utilisateur d'une manière qui, on l'espère, n'écrira pas sur les données précédentes, dans l'espoir que les données de l'utilisateur ne soient pas déjà corrompues, mais il n'existe pas, par définition, de méthode standard pour gérer un comportement non défini.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.