C のメモリ割り当て: 空の配列を割り当てることはできますか?
C では、配列のメモリ割り当ては、新しいオペレーター。しかし、サイズ 0 の配列を割り当てるとどうなりますか?
cout << new int[0] << endl;
これは空のブロックにメモリを割り当てますか?標準の立場を調べてみましょう。
標準の解釈
C 標準 (5.3.4/7) によると、「直接式の値がnew-declarator がゼロの場合、割り当て関数が呼び出され、何も指定されていない配列が割り当てられます。
逆参照に関する懸念
ただし、標準 (3.7.3.1/2) では、「ゼロの要求として返されるポインターの逆参照の影響」と明示的に述べられています。サイズは未定義です。」これは、空の配列を割り当てることは技術的には可能ですが、その要素にアクセスしようとする (返されたポインタを逆参照するなど) ことは未定義の動作であることを意味します。
補足説明
標準では空の配列の割り当てが許可されていますが、サイズがゼロのメモリの要求は依然として失敗する可能性があることを強調しています。これは、動的メモリ割り当てが、そのようなリクエストを独自に処理する外部システム ライブラリ (malloc() など) に依存する可能性があるためです。
影響とベスト プラクティス
実際には、空の配列の割り当てを避けることが一般的に良い方法であると考えられています。この動作は未定義であり、異なるプラットフォームや環境では予期しない結果が生じる可能性があります。空のコンテナーが必要なシナリオを処理する必要がある場合は、サイズがゼロの std::vector または std::array を使用するなどの代替アプローチの使用を検討してください。
以上がC は空の配列を割り当てることができますか? 割り当てられる場合、安全に使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。