Gelagat Penunjuk dalam C selepas Padam
Dalam C , pemadaman penuding mendelokasikan memori yang ditunjukkannya. Walau bagaimanapun, gelagat penunjuk yang menunjuk kepada memori yang dipadamkan menjadi tidak ditentukan atau ditentukan pelaksanaan, bergantung pada versi C.
Pertimbangkan kod berikut:
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // Assuming undefined or implementation-defined in C++11 A* d = b; // Supposed to be legal</code>
Nilai Bacaan bagi Salinan Penunjuk (b) yang Dipadamkan
Dalam C 11, membaca nilai b selepas a telah dipadamkan adalah tingkah laku yang tidak ditentukan. Walau bagaimanapun, dalam C 14, ia ditakrifkan pelaksanaan. Ini kerana penunjuk b itu sendiri menjadi "nilai penunjuk tidak sah" selepas a dipadamkan.
Gelagat Ditentukan Pelaksanaan
Dalam C 14, menggunakan nilai penunjuk tidak sah , termasuk menyalinnya, mempunyai tingkah laku yang ditentukan pelaksanaan. Ini bermakna pengkompil dibenarkan memutuskan perkara yang perlu dilakukan dalam kes sedemikian. Dalam sesetengah pelaksanaan, ia mungkin menjana ralat masa jalan, manakala dalam yang lain, ia mungkin membenarkan operasi tetapi mengakibatkan tingkah laku yang tidak ditentukan apabila penunjuk digunakan kemudiannya.
Sah atau Tidak Ditakrifkan?
Oleh itu, kedua-dua A* c = a; dan A* d = b; tidak ditakrifkan dalam C 11 dan pelaksanaan ditakrifkan dalam C 14. Nilai penunjuk (b) yang disalin dianggap sebagai nilai penunjuk tidak sah dan penggunaannya tertakluk kepada takrifan pelaksanaan.
Atas ialah kandungan terperinci Apakah yang Berlaku kepada Penunjuk Selepas Memadamkan Memori yang Ditunjuk Dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!