Rumah >pembangunan bahagian belakang >C++ >Apa yang Berlaku Apabila Anda Memperuntukkan Tatasusunan Bersaiz Sifar dengan `int baharu[0]` dalam C ?

Apa yang Berlaku Apabila Anda Memperuntukkan Tatasusunan Bersaiz Sifar dengan `int baharu[0]` dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 20:12:22731semak imbas

What Happens When You Allocate a Zero-Sized Array with `new int[0]` in C  ?

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!

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