Heim > Backend-Entwicklung > C++ > Hauptteil

Was passiert mit Zeigern, die auf dasselbe Objekt verweisen, nachdem eines in C gelöscht wurde?

Susan Sarandon
Freigeben: 2024-11-01 11:29:30
Original
757 Leute haben es durchsucht

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

Zeiger auf freigegebenen Speicher in C

Nach dem Löschen eines Zeigers entsteht Verwirrung hinsichtlich der Gültigkeit anderer Zeiger, die auf dasselbe Objekt verweisen. Ziel dieses Artikels ist es, dieses Verhalten in C zu verdeutlichen.

Bedenken Sie den folgenden Code:

<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>
Nach dem Login kopieren

C 11-Verhalten:

  • Zuweisen auf c vom zuvor gelöschten Zeiger a führt zu undefiniertem Verhalten, da a jetzt ein ungültiger Zeigerwert ist.
  • D zeigt jedoch auf eine Kopie von a, die vor dem Löschen erstellt wurde. Obwohl das Lesen des Werts von b auf einen freigegebenen Speicherort verweist, ist diese Aktion durch die Implementierung definiert.

C 14-Verhalten:

  • Zuweisen zu Sowohl c als auch d vom ungültigen Zeiger a verursachen immer noch undefiniertes Verhalten.
  • Das Kopieren des Werts eines ungültigen Zeigers, wie hier mit b, ist ebenfalls durch die Implementierung definiertes Verhalten.

Laut C 11-Standard führt die Verwendung eines ungültigen Zeigerwerts (einschließlich dessen Kopieren) zu undefiniertem Verhalten. In C 14 weisen solche Operationen ein durch die Implementierung definiertes Verhalten auf, was bedeutet, dass das Verhalten je nach Compiler und Betriebssystem unterschiedlich sein kann.

Daher ist es sowohl in C 11 als auch in C 14 wichtig, die Verwendung von Zeigern zu vermeiden gelöscht oder auf freigegebenen Speicher verweisen. Dies kann zu unvorhersehbarem und möglicherweise fehlerhaftem Verhalten führen.

Das obige ist der detaillierte Inhalt vonWas passiert mit Zeigern, die auf dasselbe Objekt verweisen, nachdem eines in C gelöscht wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!