ホームページ >バックエンド開発 >C++ >C 標準のどこで、初期化されていないポインタの逆参照が未定義の動作として定義されていますか?

C 標準のどこで、初期化されていないポインタの逆参照が未定義の動作として定義されていますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-16 20:59:11772ブラウズ

Where in the C   Standard is Dereferencing an Uninitialized Pointer Defined as Undefined Behavior?

C 標準における初期化されていないポインタの参照解除に対する未定義の動作の決定

提起された質問は、C 標準の特定のセクションを理解することを目的としています。初期化されていないポインタを未定義の動作として逆参照する。 5.3.1/1 および 3.7.3.2/4 への以前の参照では関連情報が提供されていますが、初期化されていないポインターの使用に関連する未定義の動作については明示的に述べられていません。

答えは、左辺値変換を扱うセクション 4.1 にあります。 to rvalue (強調が追加されました):

"左辺値(3.10) 非関数、非配列型 T は右辺値に変換できます。T が不完全型の場合、左辺値が参照するオブジェクトが不正な形式である必要があります。型 T のオブジェクトであり、T から派生した型のオブジェクトではない、または オブジェクトが初期化されていない場合、この変換を必要とするプログラムは 未定義の動作."

このセクションでは、初期化されていないオブジェクトを参照する左辺値 (ポインターなど) を使用しようとすると、未定義の動作が発生することを明確に述べています。したがって、提供されているコード サンプル

int* ptr;
*ptr = 0;

は、ポインタ ptr が初期化なしで使用されているため、実際に未定義の動作を示しています。

このトピックを深く理解するには、C 標準で「初期化されていない」を検索してください。 " では、初期化されていないオブジェクトに関連する未定義の動作について触れた追加のセクションが表示されます。

以上がC 標準のどこで、初期化されていないポインタの逆参照が未定義の動作として定義されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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