Rumah >pembangunan bahagian belakang >C++ >Bolehkah `new int[0]` Memperuntukkan Memori dalam C , dan Apakah Implikasinya?
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!