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

Bolehkah `new int[0]` Memperuntukkan Memori dalam C , dan Apakah Implikasinya?

Patricia Arquette
Patricia Arquetteasal
2024-12-29 18:00:26886semak imbas

Can `new int[0]` Allocate Memory in C  , and What are the Implications?

Bolehkah Tatasusunan Kosong Diperuntukkan dalam C Menggunakan "int baharu[0]"?

Dalam C , penggunaan operator baharu untuk memperuntukkan ingatan sering digunakan. Walau bagaimanapun, timbul persoalan mengenai peruntukan tatasusunan kosong menggunakan int[0] baharu. Adakah kod ini memperuntukkan memori, dan apakah yang ditentukan oleh piawai mengenainya?

Perspektif Standard

Menurut 5.3.4/7 piawaian C, apabila langsung -ungkapan pengisytiharan baru menilai kepada sifar, fungsi peruntukan memberikan tatasusunan tanpa unsur. Namun begitu, 3.7.3.1/2 menekankan bahawa penyahrujukan penunjuk yang terhasil daripada permintaan saiz sifar membawa kepada tingkah laku yang tidak ditentukan.

Dalam Amalan

Walaupun peruntukan standard untuk memperuntukkan tatasusunan kosong, ia memberi amaran bahawa operasi ini mungkin masih gagal. Akibatnya, seseorang hanya boleh menghantar memori yang diperuntukkan dengan selamat kepada pemadaman tatasusunan untuk deallocation, mengelakkan sebarang akses memori langsung.

Nota Khas

Nota kaki dalam piawaian mencadangkan bahawa tingkah laku meniru pendekatan malloc() atau calloc() dalam C, di mana permintaan sifar mengembalikan penunjuk bukan nol. Sisihan daripada C ini memastikan kesalingoperasian merentas platform dan membenarkan peruntukan tatasusunan kosong dalam C .

Atas ialah kandungan terperinci Bolehkah `new int[0]` Memperuntukkan Memori dalam C , dan 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