C++ | Zeiger Phänomen? oder eine Simple erklärung?

Hi leute sry das ich schon wieder hier nen Thread auf mache aber ich beschäfte mich atm mit Zeigern in C++ hab mir auch endlich ein RICHTIGES buch gekauft mit dem ich auch zufrieden bin ...
Nun beim Kapitel Zeiger angelangt ging es um dynamische Objekte und das man den Speicher wieder freigeben kann zB:

int* pointer = new int;
*pointer = 100;
delete pointer;

Dazu gabs ein gutes Bespiel und da ist mir was komsiches Passiert hier der Source:

Code:
//Dynamische Objekte (NEW/DELETE
#include <iostream>
using namespace std;

int main()
{
    int* pointer1 = new int;
    int* pointer2 = new int;
    int tmp;
    
    *pointer1=100;
    *pointer2=200;
    cout << "Wert von pointer1: " << *pointer1 << "\n";
    cout << "Wert von pointer2: " << *pointer2 << "\n";
    cout << "Addr von pointer1: " << &pointer1 << "\n";
    cout << "Addr von pointer2: " << &pointer2 << "\n\n";
    cout << "Werte Tauschen...\n\n";
    
    
    //Werte tauschen
    tmp = *pointer2;
    *pointer2=*pointer1;
    *pointer1=tmp;
    cout << "Wert von pointer1: " << *pointer1 << "\n";
    cout << "Wert von pointer2: " << *pointer2 << "\n";
    cout << "Addr von pointer1: " << &pointer1 << "\n";
    cout << "Addr von pointer2: " << &pointer2 << "\n\n";
    cout<<"Speicher wieder freigeben...\n\n";
    
    //Speicher wieder freigeben    
    delete pointer1;
    delete pointer2;
    cout << "Wert von pointer1: " << *pointer1 << "\n";
    cout << "Wert von pointer2: " << *pointer2 << "\n";
    cout << "Addr von pointer1: " << &pointer1 << "\n";
    cout << "Addr von pointer2: " << &pointer2 << "\n\n";
    
    system("pause>nul");
    return 0;
}
Es geht um die Letzten Zeilen.. nachdem ich mit delete pointer1; und delete pointer2;
den Speicher freigegeben habe sollte ja der Wert auf 0 stehen jedoch:
Im bild zu sehen:
Wieso ist pointer2 nicht auf 0?
 
Wenn du einen Speicherbereich freigibst, in diesem fall 2*4 Bytes von dem int, ist nicht mehr garantiert dass der freigegebene Speicher auch so bleibt wie davor.
KÖNNTE ja zum beispiel sein dass die delete-routine intern nen Block reserviert, die ersten 4 Bytes auf 0 setzt und byte 5-8 dann auf den wert setzt.
 
ahh...
d.h. der speicher is zwar freigegeben dadurch kann es passieren das das Programm einen anderen Wert drauf ablegt?
hoffe hab des richtig verstanden danke :)
 
vielleicht kann ja jemand aus ANSI C++ oder ähnlichem zitieren ;) . Ich verlasse mich hier auf:http://www-unix.mcs.anl.gov/dbpp/text/node52.html
The delete operator is used to release dynamically allocated storage
d.h es muss ja nichts danach initialsiert werden ;)
und zwischen
Code:
delete pointer2;  
und
 cout << "Wert von pointer2: " << *pointer2 << "\n";
sind jede Menge Anweisungen (vielleicht nicht in C++ ersichtlich ;) )
außerdem existiert auch eine Heapverwaltung, die wiederum afaik im Heap selber auch Einträge hat (k.A - es hängt von der Heapimplementierung ab, es kann auch sein, dass cout selbst noch dynamischen Speicher nutzt).
Jedenfalls: "der freigegebene Speicher hat den Programmierer nicht mehr zu kümmern" - Prinzip. Also nicht wundern ;)
 
Zurück
Oben