Zeiger auf dem Heap
-
Vor kurzem wollte ich einen Freund Zeiger erklären.
dabei schrieb ich folgenden Quellcode.int* pAge = new int; *pAge = 17; cout << *pAge << endl; delete pAge; pAge = 0;
Es heißt ja, dass man Zeiger auf dem Heap nachder Verwendung löschen soll (mit delete), und auf 0 setzen soll.
Nun mein Programm löst bei diesem Code einen Laufzeitfehler aus.
Wenn ich das delete weglasse, dann nicht.Was stimmt da nicht?
P.S Ich habe auch schon in einem Buch nachgeschaut, und keinen fehler bemerkt.
-
vielleicht musst du erst den ausgabe strom flushen, dass kann ich mir aber nicht vorstellen, ansonsten ist der voll ok.
-
Der Code ist korrekt. Ist das wirklich das ganze Programm?
BTW erstens flusht endl schon, zweitens hat das flushen nix mit dem Zeiger zu schaffen, da der *streambuf* geflusht wird, dh die Zeichenrepräsentation -- auf den vorher eingefügten Wert wird nicht nochmal zugegriffen.
-
Ähm, das ist jetzt peinlich, aber ich bin drauf gekommen, dass ich dem zeiger weiter oben im Programm eine andere adresse zugewiesen habe.
Also hat sich erledigt.
-
@bashar: das hatte ich auch gedacht, war mir aber nicht ganz sicher, hab ja deswegen auch geschrieben, dass ich mir das nicht vorstellen kann...
-
Warum den Zeiger nach dem delete noch auf Null setzten? Ist das keine Zeitverschwendung? In welchem Buch/Tutorial findet man solche Vorgaben?
-
in einem sehr, sehr schlechten