標準 C でのアクセス違反の例外処理
割り当てられたオブジェクトの境界を超えてメモリにアクセスすると、アクセス違反例外が発生する可能性があります。標準 C では、標準例外ハンドラを使用してこの例外を直接キャッチすることはできません。
アクセス違反を処理するには、プラットフォーム固有のメカニズムを利用する方法があります。ただし、この記事では、標準 C の例外とエラー処理を活用する方法について説明します。
Throw and Catch の魔法
アクセス違反を捕捉する鍵これは、シグナル ハンドラー関数内で例外をスローし、それをメイン プログラムでキャッチすることです。これにより、アクセス違反が発生したときにプログラムが異常終了しないことが保証されます。
void SignalHandler(int signal) { printf("Signal %d",signal); throw "!Access Violation!"; }
main 関数では、SIGSEGV シグナル (セグメンテーション違反のシグナル) のシグナル ハンドラーを設定し、try を確立する必要があります。 -catch ブロックを処理するException.
int main() { typedef void (*SignalHandlerPointer)(int); SignalHandlerPointer previousHandler; previousHandler = signal(SIGSEGV , SignalHandler); try{ *(int *) 0 = 0;// Baaaaaaad thing that should never be caught. You should write good code in the first place. } catch(char *e) { printf("Exception Caught: %s\n",e); } printf("Now we continue, unhindered, like the abomination never happened. (I am an EVIL genius)\n"); printf("But please kids, DONT TRY THIS AT HOME ;)\n"); }
結論
標準 C でアクセス違反を検出するのは簡単ではありませんが、この記事で紹介するアプローチは、これらの例外をプログラムで処理する方法を提供します。シグナル ハンドラーと例外処理メカニズムを利用することで、開発者はそのようなエラーから適切に回復できる、より堅牢なコードを作成できます。
以上が例外を使用して標準 C でアクセス違反を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。