Rumah >pembangunan bahagian belakang >C++ >Adakah Penyahrujukan Penunjuk Tidak Dimulakan dalam Kelakuan Tidak Ditakrifkan C?
Titik kekeliruan biasa dalam C ialah memahami apabila membatalkan rujukan penunjuk tidak dimulakan membentuk tingkah laku tidak ditentukan (UB). Walaupun piawaian C mengandungi banyak peraturan, ia boleh mencabar untuk mencari peruntukan tepat yang mentakrifkan gelagat ini.
Coretan kod yang dimaksudkan:
int* ptr; *ptr = 0;
menimbulkan persoalan sama ada menolak rujukan ptr menuju ke UB. Untuk menjelaskan perkara ini, kami akan menyelidiki bahagian berkaitan piawaian C.
Bahagian 4.1 piawaian memberikan pandangan yang penting. Ia menyatakan bahawa:
"Jika objek yang dirujuk nilai l bukan objek jenis T dan bukan objek jenis yang diperoleh daripada T, atau jika objek tidak dimulakan, program yang memerlukan ini penukaran mempunyai gelagat yang tidak ditentukan."
Dalam kes kami, ptr ialah penunjuk yang tidak dimulakan kepada integer. Oleh itu, percubaan untuk menyahrujuknya tanpa memulakannya terlebih dahulu berada di bawah syarat yang diterangkan dalam Bahagian 4.1 dan mengakibatkan UB.
Seksyen 3.7.3.2/4, sering disebut berkaitan dengan UB, tidak terpakai secara langsung pada kod coretan yang dipersoalkan kerana ia berkaitan dengan menggunakan fungsi deallocation pada penunjuk bukan nol.
Mencari "uninitial" dalam standard boleh mendedahkan bahagian lain yang berkaitan, seperti 8.5.1, yang menjelaskan lagi peraturan untuk mengakses objek yang tidak diinisialisasi.
Atas ialah kandungan terperinci Adakah Penyahrujukan Penunjuk Tidak Dimulakan dalam Kelakuan Tidak Ditakrifkan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!