Rumah >pembangunan bahagian belakang >C++ >Bolehkah C Memperuntukkan Tatasusunan Kosong, dan Jika Ya, Adakah Ia Selamat Digunakan?

Bolehkah C Memperuntukkan Tatasusunan Kosong, dan Jika Ya, Adakah Ia Selamat Digunakan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 02:33:10646semak imbas

Can C   Allocate an Empty Array, and If So, Is It Safe to Use?

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!

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