ホームページ >バックエンド開発 >C++ >C `new int[0]` は空のメモリを割り当てることができますか? 割り当てられる場合、どのような影響がありますか?

C `new int[0]` は空のメモリを割り当てることができますか? 割り当てられる場合、どのような影響がありますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-26 13:07:10228ブラウズ

Can C   `new int[0]` Allocate Empty Memory, and If So, What Are the Implications?

好奇心コーナー: C での空のメモリの割り当て

C プログラミングの領域では、興味深い質問が生じます。空のブロック、new で表されるint[0].

テスト アプリケーションからの観察

new int[0] の結果を出力する単純なテスト アプリケーションは、0x876c0b8 の出力を示します。メモリは実際に割り当てられています。

標準

C 標準は、この問題に関するガイダンスを提供しています:

  • ゼロサイズ配列: 5.3.4/7 では、直接新しい-declarator の式の値が 0 の場合、配列に割り当てが行われます。 elements.
  • 未定義の逆参照: 3.7.3.1/2 は、サイズ 0 のリクエストに対して返されたポインターの逆参照には未定義の動作があることを警告します。

追加考慮事項

  • サイズがゼロのリクエストであっても、割り当てが失敗する可能性があります。
  • 割り当ては許可されていますが、返されたメモリの逆参照はプラットフォーム間で法的に明確に定義されていません。
  • 割り当てられたメモリは、ゼロであっても削除する必要があります。 size.

脚注の洞察

3.7.3.1/2 の興味深い脚注は、その意図が演算子 new() の実装を有効にすることであることを明らかにしています。 malloc() または calloc() のいずれかを使用します。これらは、サイズがゼロのリクエストに関して同様に動作します。ただし、C は、非 null ポインターを返すためにサイズ 0 のリクエストを必要とする点で C とは異なります。

以上がC `new int[0]` は空のメモリを割り当てることができますか? 割り当てられる場合、どのような影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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