Speicherfreigabe bei delete

I

ixs

Foren As
Hi,

ich hab mal eine kleine frage,
warum funktioniert das?

Code:
#include<iostream>
using namespace std;
int main(int argc, char *argv[]) {

   int *iptr = new int;

   *iptr=100;
   delete iptr;
   *iptr=200;
   // die Adresse von iptr bleibt auch die gleiche.

  return 0;

}

vielen dank! :))
 
Der Operator delete aus C++ hat ja nicht die Aufgabe den Speicher zu löschen, er hebt nur die Reservierung für diesen Speicher auf, soll heißen, bei einem weiteren new kannst du wieder genau die Speicheraddresse bekommen, die vor dem delete für die erste Variable definiert war.

Hier ein Beispiel um das anschaulich zu machen:
Code:
#include <iostream>

int main () {
	int *a, *b;
	a = new int;
	delete a;
	b = new int;
	std::cout << "a: " << a << " b: "<< b << std::endl; // most likely the same
	a = new int;
	std::cout << "a: " << a << " b: "<< b << std::endl; // never the same
}

Dass du da weiter Werte reinschreiben kannst liegt daran, dass delete die Adresse nicht anfasst, es handelt sich weiterhin um eine Speicheradresse, die einfach irgendwo auf den Heap zeigt, natürlich kann das Programm dort hinschreiben.
Klug ist es also, jeden Pointer nach einem delete auf NULL zu setzen.
 
Gibt es eigentlich eine Möglichkeit sich den Status einer Adresse(frei,reserviert,belegt) ausgeben zu lassen? :think:

danke! :)
 
Gibt es eigentlich eine Möglichkeit sich den Status einer Adresse(frei,reserviert,belegt) ausgeben zu lassen?
Gewiss nicht unter C/C++. Solch eine Buchhaltung wuerde ein Programm stark verlangsamen. Es gibt Debug-Programme wie valgrind, die unter recht hohem Aufwand eben solche Fragen beruecksichtigen. Die Tatsache, dass ein Programm, das mit valgrind gestartet wurde, recht langsam laeuft (valgrind emuliert einen 386er, soweit ich weiss ;-) ), deutet darauf hin, dass es nicht ganz simple ist, unter C solch eine Buchhaltung einzufuehren.
 
alles klar, vielen dank!
hätte mir zur besseren Veranschauung geholfen.

gruß ixs
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

String auf Konsole ausgeben

Funktion nicht gefunden

GCC liefert in Eclipse Kompilierfehler

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Zurück
Oben