- Hängender Zeiger
-
Ein hängender Zeiger oder wilder Zeiger (engl. dangling pointer) bezeichnet in der Informatik einen Zeiger, der einen ungültigen Wert enthält und dadurch auf einen nicht vorhandenen oder nicht dem Zeiger zugeordneten Speicherbereich verweist.
Hängende Zeiger kommen oft dadurch zustande, dass sie nicht initialisiert wurden, aber auch dadurch, dass sie auf einen Speicherbereich verweisen, der bereits freigegeben wurde.
Hängende Zeiger können für den Programmlauf unvorhersehbare Auswirkungen haben und das Programm zum Absturz bringen.
Diese Unvorhersehbarkeit rührt daher, dass ein Zugriff auf einen bereits freigegebenen Speicherbereichen nicht zwangsläufig sofort einen Laufzeitfehler (Schutzverletzung) auslöst, da zwischen der Speicherfreigabe durch den Programmierer und der tatsächlichen Freigabe durch das Laufzeitsystem noch eine gewisse Zeit vergehen kann. Findet in dieser (unvorhersagbaren) Zwischenzeit noch ein Zugriff auf den freigegebenen Speicher statt (Zeile (*) im Beispiel), so löst er keinen Fehler aus. Da dies aber nicht reproduzierbar ist, sind diese sporadischen Fehler besonders heimtückisch.
Beispiel
C++
#include <iostream> using namespace std; int main() { int * pPointer = new int; // Pointer vom Typ integer angelegt cout << pPointer; // Das würde die Speicheradresse im Heap anzeigen delete pPointer; // Speicher freigeben cout << pPointer; // Zeigt noch immer die Speicheradresse im Heap an, // obwohl sie freigeben wurde => Dangling Pointer // *pPointer = 10; // (*) Zugriff auf diesen Pointer würde (bzw. kann) einen fatalen Fehler auslösen pPointer = 0; // pPointer ist jetzt kein Dangling Pointer mehr, siehe Nullpointer return 0; }
Es zeugt von gutem Programmierstil nach einem delete den Pointer auf 0 zu setzen, auch wenn auf den Pointer nicht mehr zugegriffen wird.
Siehe auch
Wikimedia Foundation.