Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah yang Berlaku kepada Penunjuk Selepas Memadamkan Memori yang Ditunjuk Dalam C ?

Apakah yang Berlaku kepada Penunjuk Selepas Memadamkan Memori yang Ditunjuk Dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 01:48:02993semak imbas

What Happens to Pointers After Deleting the Memory They Point To in C  ?

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!

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