Détecter les exceptions de violation d'accès à la mémoire dans le standard C
Le standard C offre une prise en charge limitée pour détecter les exceptions de violation d'accès à la mémoire sans recourir aux extensions spécifiques à Microsoft .
Exemple :
Considérez le code :
int *ptr; *ptr = 1000;
Tenter de déréférencer un pointeur non initialisé entraînerait normalement une exception de violation d'accès. Cependant, la norme C ne fournit pas de mécanisme dédié pour gérer de telles exceptions.
Solution :
L'astuce consiste à lancer une exception personnalisée dans le gestionnaire de signal et à l'attraper. dehors. Voici l'implémentation :
#include <signal.h> void SignalHandler(int signal) { printf("Signal %d", signal); throw "!Access Violation!"; } int main() { signal(SIGSEGV, SignalHandler); try { *(int *) 0 = 0; // Trigger access violation (intentionally bad code) } catch (const char *e) { printf("Exception Caught: %s\n", e); } printf("Execution continues... (Note: Bad coding practices should be avoided)"); }
Lorsqu'une violation d'accès se produit, l'exception personnalisée est levée et interceptée en dehors du gestionnaire de signal. Cela permet une gestion personnalisée des exceptions sans recourir aux extensions spécifiques à Microsoft.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!