Rumah >pembangunan bahagian belakang >C++ >Mengapakah Penyahrujukan Penunjuk Tidak Dimulakan Kelakuan Tidak Ditakrifkan dalam C ?

Mengapakah Penyahrujukan Penunjuk Tidak Dimulakan Kelakuan Tidak Ditakrifkan dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 03:04:12409semak imbas

Why is Dereferencing an Uninitialized Pointer Undefined Behavior in C  ?

Menujuk Penunjuk Tidak Dimulakan: Perjalanan ke Tingkah Laku Tidak Ditakrifkan

Mentakrifkan penuding tidak dimulakan sebagai tingkah laku tidak ditentukan dalam piawaian C memerlukan pemahaman yang menyeluruh tentang semantik bahasa. Walaupun pengenalpastian tingkah laku tidak ditentukan (UB) tidak mudah dilihat dalam bahagian piawai yang disebut, penerokaan yang lebih mendalam mendedahkan rasional asas.

Bahagian 4.1 piawaian C mentakrifkan penukaran nilai (seperti penunjuk) kepada rnilai (ungkapan yang boleh dinilai kepada nilai). Penukaran ini dibenarkan untuk jenis bukan fungsi, bukan tatasusunan, dengan syarat nilai l merujuk kepada objek yang dimulakan daripada jenis yang ditentukan atau jenis terbitannya. Walau bagaimanapun, jika lvalue merujuk objek yang tidak dimulakan atau tidak sah, penukaran akan menghasilkan gelagat yang tidak ditentukan.

Dalam coretan kod yang disediakan:

int* ptr;
*ptr = 0;

Ptr penunjuk diisytiharkan tetapi tidak dimulakan, menjadikan ia objek yang tidak dimulakan. Percubaan seterusnya untuk menyahrujuk penunjuk ini (*ptr) membentuk penukaran lnilai kepada nilai, melanggar syarat yang dinyatakan dalam Bahagian 4.1. Memandangkan penukaran melibatkan objek yang tidak dimulakan, tingkah laku itu dianggap tidak ditentukan.

Atas ialah kandungan terperinci Mengapakah Penyahrujukan Penunjuk Tidak Dimulakan Kelakuan Tidak Ditakrifkan 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