C Peruntukan Memori dengan int baharu[0]
Apabila memperuntukkan memori dengan pengendali baharu, persoalan biasa timbul: apa yang berlaku apabila saiz tatasusunan yang diminta ialah sifar?
Anehnya, kod itu coretan:
cout << new int[0] << endl;
mengeluarkan alamat, menunjukkan bahawa memori telah diperuntukkan. Piawaian C menangani tingkah laku ini:
Peruntukan dan Penggunaan Tatasusunan Kosong
Seperti yang dinyatakan dalam 5.3.4/7 standard C, tatasusunan bersaiz sifar boleh diperuntukkan tetapi penggunaannya tidak ditentukan, seperti 3.7.3.1/2.
Mengendalikan Tatasusunan Bersaiz Sifar
Walaupun memori berjaya diperuntukkan, ia tidak dijamin selamat untuk dinyahrujuk. Tiada jaminan bahawa ia akan menunjukkan ingatan yang sah.
Kesimpulan
Walaupun dibenarkan untuk memperuntukkan tatasusunan kosong dengan int[0] baharu, mengakses atau mengubah suai ingatan yang diperuntukkan mempunyai tingkah laku yang tidak ditentukan dan harus dielakkan. Sebarang memori yang diperuntukkan sedemikian mesti dipadamkan menggunakan padam, memastikan pelepasan sumber yang betul.
Adalah penting untuk mengambil perhatian keperluan standard untuk operator new() untuk mengembalikan penunjuk bukan nol walaupun untuk permintaan bersaiz sifar, berbeza daripada tingkah laku malloc(). Walau bagaimanapun, peruntukan sebenar mungkin masih gagal.
Atas ialah kandungan terperinci Apa yang Berlaku Apabila Anda Memperuntukkan Tatasusunan Bersaiz Sifar dengan `int baharu[0]` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!