ホームページ >バックエンド開発 >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 固有の手段を使用せずにメモリ アクセス違反例外をキャッチするための限定的なサポートが提供されます。 extensions.

例:

コードを考えてみましょう:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。