Speicherfreigabe bei delete

Dieses Thema im Forum "C/C++" wurde erstellt von ixs, 13.11.2008.

  1. ixs

    ixs Foren As

    Dabei seit:
    20.06.2008
    Beiträge:
    95
    Zustimmungen:
    0
    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! :))
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Mµ*e^13.5_?¿, 13.11.2008
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    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.
     
  4. ixs

    ixs Foren As

    Dabei seit:
    20.06.2008
    Beiträge:
    95
    Zustimmungen:
    0
    Gibt es eigentlich eine Möglichkeit sich den Status einer Adresse(frei,reserviert,belegt) ausgeben zu lassen? :think:

    danke! :)
     
  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    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.
     
  6. ixs

    ixs Foren As

    Dabei seit:
    20.06.2008
    Beiträge:
    95
    Zustimmungen:
    0
    alles klar, vielen dank!
    hätte mir zur besseren Veranschauung geholfen.

    gruß ixs
     
Thema:

Speicherfreigabe bei delete

Die Seite wird geladen...

Speicherfreigabe bei delete - Ähnliche Themen

  1. deleted

    deleted: deleted
  2. Delete Script

    Delete Script: Hallo, ich möchte mir ein delete script schreiben welches alle daten, ordner und unterordner löscht die älter als 365 Tage sind. mein script...
  3. Amavis verewigt sich nicht im Mailheader + seltsame unseen-deleted-Meldungen

    Amavis verewigt sich nicht im Mailheader + seltsame unseen-deleted-Meldungen: Ich ärgere mich gerade mal wieder mit Postfix und Amavis rum. Ansich scheint alles soweit zu funktionieren, aber irgendwie vermerkt Amavis im...
  4. Programmieren mit qt: new vs. delete

    Programmieren mit qt: new vs. delete: Ich gucke mir grade ein paar Beispiele zu Qt4.2 an, zum Beispiel dieses hier. Dabei faellt auf, dass sehr selten, manchmal nie, der Speicher, der...
  5. [ArchLinux] Backspace = Delete

    [ArchLinux] Backspace = Delete: Guten Abend :)! Folgendes Problem: wenn ich über SSH auf meinen Debian vServer connecte und dort dann z.B. aptitude starte, verhält sich die...