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>
C 11-Verhalten:
C 14-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!