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;
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)"); }
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!