ホームページ > バックエンド開発 > C++ > C でサイズ 0 の `new[]` を使用するとどうなりますか?

C でサイズ 0 の `new[]` を使用するとどうなりますか?

Barbara Streisand
リリース: 2024-12-16 16:26:10
オリジナル
547 人が閲覧しました

What Happens When You Use `new[]` with a Size of Zero in C  ?

C によるメモリ割り当て new[0]

C では、 new[] 演算子を使用して動的メモリの割り当てが可能です。しかし、オペレーター呼び出しで指定された配列サイズがゼロの場合はどうなるのでしょうか?単純なテスト プログラムの出力は、メモリが割り当てられているように見えることを示しています。

標準定義

C 標準によると、5.3.4/7:

"direct-new-declarator の式の値が 0 の場合、割り当て関数が呼び出され、配列が割り当てられません。 「

未定義の動作

ただし、3.7.3.1/2 には次のように記載されていることに注意してください。

」ゼロ サイズのリクエストとして返されたポインターは未定義です。"

これは、 new[] を使用して空の配列を割り当てることは技術的に可能ですが、それが指すメモリへのアクセスまたは変更は未定義の動作になります。

割り当ての失敗

さらに、標準では次のように述べられています。サイズがゼロのリクエストであっても、割り当ては可能です。

影響

実際には、これは次のことを意味します:

  • new[] を使用して空の配列を割り当てることができます。
  • 返されたポインタを逆参照しないでください。
  • 割り当てられたポインタを削除する必要があります。

脚注

標準には、new[] を許可する意図があることを示す脚注が含まれています。 malloc() や calloc() などの関数を使用して実装されます。これらの関数は、サイズがゼロのリクエストに対しても null 以外のポインターを返します。

以上がC でサイズ 0 の `new[]` を使用するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート