「new int[0]」を使用して C で空の配列を割り当てることができますか?
C での new 演算子の使用法メモリがよく使われます。ただし、new int[0] を使用した空の配列の割り当てに関して疑問が生じます。このコードはメモリを割り当てますか? また、標準ではそれについてどのようなことが指定されていますか?
標準パースペクティブ
C 標準の 5.3.4/7 によると、直接-new-declarator 式がゼロに評価されると、割り当て関数は要素のない配列を割り当てます。それにもかかわらず、3.7.3.1/2 では、サイズ 0 のリクエストから生じるポインターの逆参照が未定義の動作につながることを強調しています。
実際には
標準では次のことが許容されているにもかかわらず、空の配列を割り当てても、この操作は失敗する可能性があることが警告されます。したがって、直接メモリ アクセスを回避して、割り当て解除のために割り当てられたメモリを配列削除に安全に渡すことのみが可能です。
特記事項
規格の脚注では、この動作は、C の malloc() または calloc() のアプローチを模倣しており、ゼロリクエストは非 null ポインターを返します。この C からの逸脱により、プラットフォーム間の相互運用性が保証され、 C での空の配列の割り当てが可能になります。
以上が`new int[0]` は C でメモリを割り当てることができますか?またその影響は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。