Stack und Heap



  • Hallo,
    könnte mir jemand sagen welche Belegung des Speichers hier je Zeile vorlieg?
    Vielleicht kann mir das jemand näher bringen.

    Startadresse Stack: 1000
    Startadresse Heap: 2000
    Zeiger- und INT Größe 4 Byte

    1: int* p = new int;
    2: p = 3;
    3: int
    y = 0;
    4: y = p;
    5: delete p; //Problematische Anweisung
    6: int* z = new int;
    7: *z = 5;
    8: *y = 7;


  • Mod

    Der Stack wird bereits im function prologue so gesetzt, dass Platz für alle drei Zeiger vorhanden ist.

    int* p = new int; // Es werden außerdem vier Byte auf dem Heap alloziert.
    *p = 3; // Die vier Bytes werden entsprechend gesetzt.
    int* y = 0;
    y = p; // Der Zeiger wird zugewiesen
    delete p; // Der belegte Speicher auf den p zeigt wird freigegeben
    int* z = new int; // Noch einmal vier Bytes werden alloziert
    *z = 5;
    *y = 7; // Undefiniertes Verhalten. (Wegen dieser Zeile lässt sich über das gesamte Verhalten, auch von vorherigen Zeilen, eigentlich keine Aussage machen)
    


  • Welche Speicheradressen und Werte haben die Variablen?



  • paupau schrieb:

    Welche Speicheradressen und Werte haben die Variablen?

    Das mußt Du deinen lokalen Compiler fragen.


  • Mod

    paupau schrieb:

    Welche Speicheradressen und Werte haben die Variablen?

    Über die Werte kann man praktisch nichts aussagen. So etwas wie eine "Heapadresse" gibt es gar nicht. Und die Adressen der Stackvariablen hängen auch von verschiedenen Faktoren der ABI ab, wie z.B. Wachstumsrichtung des Stacks.



  • mach deine - fehlerhaften - hausaufgaben halt selbst oder frage spezifische fragen und werf nicht einfach die aufgabe hin.



  • Das ist die Aufgabenstellung 😃
    Es gibt kein Programm sodern nur diesen Aussschnitt.


Anmelden zum Antworten