Rumah >pembangunan bahagian belakang >C++ >Bolehkah C `new int[0]` Memperuntukkan Memori Kosong, dan Jika Ya, Apakah Implikasinya?

Bolehkah C `new int[0]` Memperuntukkan Memori Kosong, dan Jika Ya, Apakah Implikasinya?

Barbara Streisand
Barbara Streisandasal
2024-12-26 13:07:10228semak imbas

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

Sudut Rasa ingin tahu: Memperuntukkan Memori Kosong dalam C

Dalam bidang pengaturcaraan C, persoalan yang menarik timbul: Bolehkah kita memperuntukkan memori untuk blok kosong, diwakili oleh int baharu[0].

Pemerhatian daripada Ujian Aplikasi

Aplikasi ujian mudah yang mencetak hasil int baharu[0] mendedahkan output 0x876c0b8, menunjukkan bahawa memori sememangnya diperuntukkan.

Menyelam ke dalam Standard

Piawaian C menyediakan panduan tentang perkara ini perkara:

  • Tatasusunan Bersaiz Sifar: 5.3.4/7 menyatakan bahawa pengisytihar langsung-baru-baru dengan nilai ungkapan sifar menghasilkan peruntukan untuk tatasusunan tanpa elemen.
  • Penyahrujukan Tidak Tentu: 3.7.3.1/2 memberi amaran bahawa penyahrujukan penuding dikembalikan untuk permintaan saiz sifar mempunyai gelagat yang tidak ditentukan.

Pertimbangan Tambahan

  • Walaupun dengan permintaan saiz sifar, peruntukan mungkin gagal.
  • Semasa peruntukan dibenarkan, membatalkan rujukan memori yang dikembalikan adalah tidak ditakrifkan dengan baik mengikut undang-undang merentas platform.
  • Anda harus memadamkan memori yang diperuntukkan, walaupun ia mempunyai saiz sifar.

Foot-Note Insights

Nota kaki yang menarik daripada 3.7.3.1/2 mendedahkan bahawa niatnya adalah untuk membolehkan pelaksanaan operator new() menggunakan sama ada malloc() atau calloc(), yang berkelakuan serupa berkenaan dengan permintaan bersaiz sifar. Walau bagaimanapun, C berbeza daripada C dengan memerlukan permintaan bersaiz sifar untuk mengembalikan penunjuk bukan nol.

Atas ialah kandungan terperinci Bolehkah C `new int[0]` Memperuntukkan Memori Kosong, dan Jika Ya, Apakah Implikasinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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