Dangling Pointer in C++
In diesem Artikel wird erläutert, was ein baumelnder Zeiger ist.
Dangling Pointer in C++
Ein freier Zeiger ist ein Zeiger (Verweis) auf ein Objekt, das nicht mehr existiert. Wenn das Objekt gelöscht wird, zeigt der Zeiger auf die Speicheradresse, wo es früher war.
Der baumelnde Zeiger zeigt nicht auf gültige Daten und ist nutzlos.
Ein hängender Zeiger kann auftreten, wenn ein Programmierer vergisst, einen zuvor für ein Objekt zugewiesenen Speicherplatz zu löschen. Dies kann passieren, wenn ein Programmierer zu viel Speicher zugewiesen hat und nicht genügend Speicherplatz für alle benötigten Objekte übrig hat, sodass er mehr Speicherplatz zuweist und die erste Zuweisung vergisst.
Dieser Fehler kann zum Absturz eines Programms führen, wenn zwei Zeiger auf dieselbe Speicheradresse zeigen und einer versucht, darauf zuzugreifen.
Die baumelnden Zeiger werden auch Speicherlecks genannt, weil sie Speicher aus dem Heap lecken. Ein Heap ist ein Speicherbereich, in dem sich dynamische Daten befinden und die vom Programmierer nach Bedarf zugewiesen oder freigegeben werden können.
Einfaches Beispiel für baumelnde Zeiger in C++
Dangling-Zeiger sind gefährlich, weil sie alle Arten von unvorhersehbarem Verhalten verursachen können.
Ein typisches Beispiel wäre, wenn der Dangling-Zeiger auf einen Speicherbereich zeigt, in dem im Laufe der Zeit ein anderes Datenelement platziert wurde. Ein Beispiel ist ein Wert in einer Liste, der sich geändert hat, nachdem der hängende Zeiger erstellt wurde.
Wenn dies passiert und der baumelnde Zeiger wird dereferenziert, greift er stattdessen auf diesen neuen Wert zu und verursacht unvorhersehbares Verhalten.
Das Problem der baumelnden Zeiger kann oft vermieden werden, indem intelligente Zeiger anstelle von rohen Zeigern verwendet werden. Ein intelligenter Zeiger ist eine Klasse, die dieselbe Schnittstelle wie ein Rohzeiger bereitstellt, aber auch automatisch das Objekt löscht, auf das gezeigt wird, wenn der intelligente Zeiger den Bereich verlässt, und alle von ihm verwendeten Ressourcen freigibt.
Lassen Sie uns einen Beispielcode für baumelnde Zeiger besprechen.
#include <iostream>
using namespace std;
int main() {
int *pointer = new int;
*pointer = 90;
delete pointer;
cout << pointer << endl;
}
Wie Sie oben im Code gesehen haben, haben wir den dynamischen Speicherplatz der Zeigervariablen zugewiesen und darin 90
gespeichert.
In der nächsten Zeile haben wir den dynamischen Speicher mit dem Operator delete
gelöscht, aber die Variable pointer
zeigt immer noch auf den dynamischen Speicher. Das ist, was ein Dangling Pointer ist.
Klicken Sie hier, um die Funktion des obigen Codes zu überprüfen.
Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.
Facebook