首頁 >後端開發 >C++ >如何捕捉標準 C 中的記憶體存取衝突異常?

如何捕捉標準 C 中的記憶體存取衝突異常?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-24 13:14:14395瀏覽

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

在標準C 中捕獲記憶體存取衝突異常

標準C 對捕獲記憶體存取衝突異常提供有限的支持,而無需求助Microsoft特定的方法

範例:

考慮程式碼:

int *ptr;
*ptr = 1000;

嘗試取消引用未初始化的指標通常會導致存取衝突異常。然而,標準 C 並沒有提供專門的機制來處理此類異常。

解決方案:

技巧在於在訊號處理程序中拋出自定義異常並捕捉它外部。這是實作:

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

發生存取衝突時,會拋出自訂異常並在訊號處理程序外部擷取。這允許自訂異常處理,而不依賴 Microsoft 特定的擴充功能。

以上是如何捕捉標準 C 中的記憶體存取衝突異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn