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
Lepaskan: 2024-12-15 03:04:12
asal
408 orang telah melayarinya

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan