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
Libérer: 2024-12-24 13:14:14
original
390 Les gens l'ont consulté

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;
Copier après la connexion

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)");
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal