質問の形式を念頭に置き、記事の核心に触れるタイトルのオプションをいくつか示します。 * C で Null ポインターを逆参照しても例外がスローされないのはなぜですか? * ウンデはどうすればよいですか

Susan Sarandon
リリース: 2024-10-25 23:59:28
オリジナル
216 人が閲覧しました

Here are a few title options, keeping in mind the question format and addressing the core of the article:

* Why Does Dereferencing a Null Pointer in C   Not Throw an Exception?
* How Do I Handle Undefined Behavior in C   When Dereferencing Null Pointers?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!