Rumah > pembangunan bahagian belakang > C++ > Apa yang Berlaku Apabila Anda Menggunakan `new[]` dengan Saiz Sifar dalam C ?

Apa yang Berlaku Apabila Anda Menggunakan `new[]` dengan Saiz Sifar dalam C ?

Barbara Streisand
Lepaskan: 2024-12-16 16:26:10
asal
547 orang telah melayarinya

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

Peruntukan Memori dengan C baharu[0]

Dalam C , pengendali[] baharu membenarkan peruntukan memori dinamik. Walau bagaimanapun, apakah yang berlaku apabila saiz tatasusunan yang dinyatakan dalam panggilan operator adalah sifar? Output program ujian ringkas menunjukkan bahawa memori nampaknya diperuntukkan.

Definisi Standard

Mengikut standard C, dalam 5.3.4/7:

"Apabila nilai ungkapan dalam pengisytiharan-baru-terus ialah sifar, fungsi peruntukan dipanggil untuk memperuntukkan tatasusunan tanpa unsur."

Tingkah Laku Tidak Ditakrifkan

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa 3.7.3.1/2 menyatakan:

"Kesan daripada membatalkan rujukan penuding yang dikembalikan kerana permintaan untuk saiz sifar tidak ditentukan."

Ini bermakna sementara itu secara teknikal adalah mungkin untuk memperuntukkan tatasusunan kosong dengan[] baharu, mengakses atau mengubah suai memori yang ditunjukkannya mempunyai gelagat tidak ditentukan.

Kegagalan Peruntukan

Selain itu, standard menyebut bahawa walaupun untuk permintaan saiz sifar, peruntukan masih boleh gagal.

Implikasi

Dalam amalan, ini bermakna:

  • Anda boleh memperuntukkan tatasusunan kosong menggunakan[].
  • Anda tidak seharusnya membatalkan rujukan penunjuk yang dikembalikan.
  • Anda harus memadamkan memori yang diperuntukkan, walaupun ia mempunyai saiz sifar.

Nota Kaki

Standard ini termasuk nota kaki yang menunjukkan bahawa tujuannya adalah untuk membenarkan[] baharu dilaksanakan menggunakan fungsi seperti malloc() atau calloc(), yang juga mengembalikan penunjuk bukan nol untuk permintaan saiz sifar.

Atas ialah kandungan terperinci Apa yang Berlaku Apabila Anda Menggunakan `new[]` dengan Saiz Sifar dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan