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

Mary-Kate Olsen
Lepaskan: 2024-11-01 01:48:02
asal
992 orang telah melayarinya

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!