Apa yang Berlaku kepada Penunjuk yang Merujuk Objek Yang Sama Selepas Satu Dipadamkan dalam C ?

Susan Sarandon
Lepaskan: 2024-11-01 11:29:30
asal
757 orang telah melayarinya

What Happens to Pointers Referencing the Same Object After One is Deleted in C  ?

Penunjuk kepada Memori yang Dilepaskan dalam C

Selepas memadamkan penunjuk, kekeliruan timbul mengenai kesahihan penunjuk lain yang merujuk objek yang sama. Artikel ini bertujuan untuk menjelaskan tingkah laku ini dalam C .

Pertimbangkan kod berikut:

<code class="cpp">A* a = new A();
A* b = a;

delete a;

A* c = a; // Illegal (C++11)
A* d = b; // Debatable legality

// Points to deallocated memory, Undefined in C++11
A* aAddr = &a;</code>
Salin selepas log masuk

C 11 Gelagat:

  • Menetapkan kepada c daripada penuding yang dipadamkan sebelum ini menyebabkan tingkah laku yang tidak ditentukan kerana a kini penunjuk yang tidak sah nilai.
  • Walau bagaimanapun, d menunjuk kepada salinan yang dibuat sebelum pemadaman. Walaupun membaca nilai b menunjukkan kepada lokasi memori yang dialokasikan, tindakan ini ditakrifkan pelaksanaan.

C 14 Gelagat:

  • Menetapkan kepada kedua-dua c dan d daripada penunjuk a yang tidak sah masih menyebabkan gelagat yang tidak ditentukan.
  • Menyalin nilai penunjuk tidak sah, seperti yang dilakukan di sini dengan b, juga merupakan tingkah laku yang ditentukan pelaksanaan.

Menurut piawaian C 11, menggunakan nilai penunjuk tidak sah (termasuk menyalinnya) menyebabkan gelagat tidak ditentukan. Dalam C 14, operasi sedemikian mempunyai gelagat yang ditentukan pelaksanaan, bermakna gelagat mungkin berbeza-beza merentas penyusun dan sistem pengendalian yang berbeza.

Oleh itu, dalam kedua-dua C 11 dan C 14, adalah penting untuk mengelak daripada menggunakan penunjuk yang telah dipadamkan atau rujuk kepada memori yang diuruskan. Melakukannya boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan berkemungkinan salah.

Atas ialah kandungan terperinci Apa yang Berlaku kepada Penunjuk yang Merujuk Objek Yang Sama Selepas Satu Dipadamkan 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!