Rumah >pembangunan bahagian belakang >C++ >Bolehkah C Memperuntukkan Tatasusunan Kosong, dan Jika Ya, Adakah Ia Selamat Digunakan?
Peruntukan Memori C: Bolehkah Anda Memperuntukkan Tatasusunan Kosong?
Dalam C , peruntukan memori untuk tatasusunan boleh dilakukan secara dinamik menggunakan pengendali baru. Walau bagaimanapun, apakah yang berlaku apabila anda memperuntukkan tatasusunan saiz sifar?
cout << new int[0] << endl;
Adakah ini akan memperuntukkan memori untuk blok kosong? Mari kita terokai pendirian standard.
Tafsiran Standard
Menurut piawaian C (5.3.4/7), "Apabila nilai ungkapan secara langsung- new-declarator adalah sifar, fungsi peruntukan dipanggil untuk memperuntukkan tatasusunan dengan no elemen."
Membatalkan Kebimbangan
Walau bagaimanapun, piawaian (3.7.3.1/2) dengan jelas menyatakan bahawa "Kesan penyahrujukan penunjuk dikembalikan sebagai permintaan untuk sifar saiz tidak ditentukan." Ini bermakna walaupun secara teknikalnya mungkin untuk memperuntukkan tatasusunan kosong, percubaan untuk mengakses elemennya (cth., dengan membatalkan rujukan penuding yang dikembalikan) adalah tingkah laku yang tidak ditentukan.
Nota Tambahan
Walaupun standard membenarkan peruntukan tatasusunan kosong, ia menekankan bahawa permintaan untuk memori bersaiz sifar masih boleh gagal. Ini kerana peruntukan memori dinamik mungkin bergantung pada pustaka sistem luaran (seperti malloc()) yang mungkin mempunyai pengendalian sendiri bagi permintaan tersebut.
Implikasi dan Amalan Terbaik
Dalam amalan, secara amnya dianggap amalan yang baik untuk mengelak memperuntukkan tatasusunan kosong. Tingkah laku tidak ditentukan dan ia mungkin membawa kepada hasil yang tidak dijangka merentas platform dan persekitaran yang berbeza. Jika anda perlu mengendalikan senario di mana bekas kosong diperlukan, pertimbangkan untuk menggunakan pendekatan alternatif seperti menggunakan std::vector atau std::array dengan saiz sifar.
Atas ialah kandungan terperinci Bolehkah C Memperuntukkan Tatasusunan Kosong, dan Jika Ya, Adakah Ia Selamat Digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!