www.wikidata.de-de.nina.az
Ein hangender Zeiger englisch dangling pointer bezeichnet in der Informatik einen Zeiger der einen ungultigen Wert enthalt und dadurch auf einen nicht vorhandenen oder nicht dem Zeiger zugeordneten dynamischen Speicherbereich auch Heap genannt verweist 1 Inhaltsverzeichnis 1 Hintergrund 2 Beispiel 3 Siehe auch 4 Weblinks 5 EinzelnachweiseHintergrund BearbeitenHangende Zeiger kommen oft dadurch zustande dass sie nicht initialisiert wurden in dem Fall alternativ wilde Zeiger genannt aber auch dadurch dass sie auf einen Speicherbereich verweisen der bereits freigegeben wurde 2 Hangende Zeiger konnen fur den Programmlauf unvorhersehbare Auswirkungen haben und das Programm zum Absturz bringen 3 4 Wahrend Userspace Programme in der Regel bei einer Dereferenzierung eines Zeigers der auf einen ungultigen Speicherbereich zeigt beendet werden kann ein solcher im Kernel bzw dessen Modulen schlimmstenfalls das gesamte System beschadigen ohne dass der Benutzer etwas bemerkt bevor es zu spat ist da keine Kontrollinstanz vorhanden ist die z B das Uberschreiben von fremdem Code verhindern konnte Daher ist bei der Kernel und Treiber Entwicklung besonders auf die korrekte Verwendung zu achten Die Unvorhersehbarkeit ruhrt daher dass ein Zugriff auf einen bereits freigegebenen Speicherbereich nicht zwangslaufig sofort einen Laufzeitfehler Schutzverletzung auslost da zwischen der Speicherfreigabe durch den Programmierer und der tatsachlichen Freigabe durch das Laufzeitsystem noch eine gewisse Zeit vergehen kann ggf ist der Speicherbereich inzwischen auch neu vergeben und ist dem Prozess tatsachlich wieder zugeteilt aber in anderem semantischem Kontext Findet auf noch erreichbaren freigegebenen Speicher ein Zugriff statt Zeilen im Beispiel so lost er keinen Fehler aus Da dies aber nicht reproduzierbar ist sind diese sporadischen Fehler besonders schwer zu entdecken Beispiel BearbeitenC include lt iostream gt using namespace std int main int pPointer new int Pointer vom Typ integer angelegt und Speicher im Heap reservieren pPointer 10 10 in den Heap schreiben an die Speicheradresse auf die der Pointer zeigt cout lt lt pPointer Zeigt die Speicheradresse im Heap an cout lt lt pPointer Auf die Speicheradresse im Heap zugreifen dort lesen und dann anzeigen 10 delete pPointer Speicher auf dem Heap freigeben cout lt lt pPointer Die Zeigervariable enthalt noch immer die Speicheradresse diese wird erneut angezeigt gt pPointer ist nun ein Dangling Pointer cout lt lt pPointer Lesender Zugriff uber Pointer auf freigegebenen Speicherbereich gt das erzeugt hoffentlich einen Programmabbruch wenn nicht wird mit ungultigen Daten weitergearbeitet pPointer 20 Schreibender Zugriff uber Pointer auf freigegebenen Speicherbereich gt noch schlimmer das wurde bzw kann andere gultige Daten uberschreiben pPointer 0 gt pPointer ist jetzt kein Dangling Pointer mehr er ist nun ein 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 5 Siehe auch BearbeitenNullzeigerWeblinks BearbeitenProgrammieren C Arrays amp Zeiger Hochschule Darmstadt FB Informatik Prof Dr R Nitsch via archive orgEinzelnachweise Bearbeiten 12 Dynamische Speicherverwaltung 12 3 Hinweise fur die Verwendung von malloc calloc und free Memento des Originals vom 26 August 2014 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot public beuth hochschule de Abgerufen am 22 August 2014 Zeiger Memento des Originals vom 22 November 2013 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www informit de In C in 21 Tagen ISBN 978 3 8272 5624 9 Vagabundierende Zeiger Abgerufen am 22 August 2014 Garbage Collection in C 2 1 Probleme bei der herkommlichen Speicherverwaltung Hangende Zeiger Memento des Originals vom 26 August 2014 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www old cdc informatik tu darmstadt de Abgerufen am 22 August 2014 Security Insider Webserver durch ungultige Zeiger zum Absturz gebracht Abgerufen am 23 August 2014 Zeiger Memento vom 22 November 2013 im Internet Archive In C in 21 Tagen ISBN 978 3 8272 5624 9 Listing 8 9 Einen vagabundierenden Zeiger erzeugen Abgerufen am 19 Januar 2021 Abgerufen von https de wikipedia org w index php title Hangender Zeiger amp oldid 228035957