Heim > Backend-Entwicklung > C++ > Wie kann ich Ausnahmen bei Speicherzugriffsverletzungen in Standard C abfangen?

Wie kann ich Ausnahmen bei Speicherzugriffsverletzungen in Standard C abfangen?

Mary-Kate Olsen
Freigeben: 2024-12-24 13:14:14
Original
390 Leute haben es durchsucht

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

Abfangen von Ausnahmen bei Speicherzugriffsverletzungen in Standard C

Standard C bietet begrenzte Unterstützung für das Abfangen von Ausnahmen bei Speicherzugriffsverletzungen, ohne auf Microsoft-spezifische Erweiterungen zurückgreifen zu müssen .

Beispiel:

Überlegen der Code:

int *ptr;
*ptr = 1000;
Nach dem Login kopieren

Der Versuch, einen nicht initialisierten Zeiger zu dereferenzieren, würde normalerweise zu einer Zugriffsverletzungsausnahme führen. Allerdings bietet Standard C keinen dedizierten Mechanismus zur Behandlung solcher Ausnahmen.

Lösung:

Der Trick besteht darin, eine benutzerdefinierte Ausnahme innerhalb des Signalhandlers auszulösen und diese abzufangen draußen. Hier ist die Implementierung:

#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)");
}
Nach dem Login kopieren

Wenn eine Zugriffsverletzung auftritt, wird die benutzerdefinierte Ausnahme ausgelöst und außerhalb des Signalhandlers abgefangen. Dies ermöglicht eine benutzerdefinierte Ausnahmebehandlung, ohne auf Microsoft-spezifische Erweiterungen angewiesen zu sein.

Das obige ist der detaillierte Inhalt vonWie kann ich Ausnahmen bei Speicherzugriffsverletzungen in Standard C abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage