C によるメモリ割り当て new[0]
C では、 new[] 演算子を使用して動的メモリの割り当てが可能です。しかし、オペレーター呼び出しで指定された配列サイズがゼロの場合はどうなるのでしょうか?単純なテスト プログラムの出力は、メモリが割り当てられているように見えることを示しています。
標準定義
C 標準によると、5.3.4/7:
"direct-new-declarator の式の値が 0 の場合、割り当て関数が呼び出され、配列が割り当てられません。 「
未定義の動作
ただし、3.7.3.1/2 には次のように記載されていることに注意してください。
」ゼロ サイズのリクエストとして返されたポインターは未定義です。"
これは、 new[] を使用して空の配列を割り当てることは技術的に可能ですが、それが指すメモリへのアクセスまたは変更は未定義の動作になります。
割り当ての失敗
さらに、標準では次のように述べられています。サイズがゼロのリクエストであっても、割り当ては可能です。
影響
実際には、これは次のことを意味します:
脚注
標準には、new[] を許可する意図があることを示す脚注が含まれています。 malloc() や calloc() などの関数を使用して実装されます。これらの関数は、サイズがゼロのリクエストに対しても null 以外のポインターを返します。
以上がC でサイズ 0 の `new[]` を使用するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。