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