C で未定義の動作を処理する方法
C では、null ポインターの逆参照は例外をトリガーしません。未定義の動作が発生します。この動作は、多くの場合、セグメンテーション違反またはクラッシュとして現れます。
次のコードを考えてみましょう:
<code class="cpp">try { int* p = nullptr; *p = 1; } catch (...) { cout << "null pointer." << endl; }</code>
「null ポインター例外」をキャッチしようとするこの試みは、null ポインターの逆参照が機能しないため機能しません。 C では例外ではありません。代わりに、未定義の動作が引き起こされます。
解決策: 手動検出と例外スロー
C では、NULL ポインターを手動で検出し、遭遇した場合に例外をスローするのはプログラマの責任です。 。これは、参照解除の前に明示的にチェックすることで実現できます。
<code class="cpp">if (p != nullptr) { *p = 1; } else { throw invalid_argument("null pointer"); }</code>
明示的に例外をスローすることで、try-catch ブロックでキャッチできます。
C 実装に関する注意事項
Visual C などの一部の C 実装には、システム/ハードウェア例外を C 例外に「変換」する機能がある場合があります。ただし、この非標準機能にはパフォーマンスの低下が伴うため、依存すべきではありません。
以上が質問の形式を念頭に置き、記事の核心に触れるタイトルのオプションをいくつか示します。 * C で Null ポインターを逆参照しても例外がスローされないのはなぜですか? * ウンデはどうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。