Maison >développement back-end >C++ >Comment puis-je détecter les exceptions de violation d'accès à la mémoire dans la norme C ?

Comment puis-je détecter les exceptions de violation d'accès à la mémoire dans la norme C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 13:14:14424parcourir

How Can I Catch Memory Access Violation Exceptions in Standard C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn