Speicherreferenz verändert sich unabsichtlich

03/13/2015 14:28 C_O_R_E#1
Ich habe gestern angefangen aus langeweile zu programmieren.

Also fing ich mit einer Implementierung eines einfachen Stacks an. Alle Elemente des Stacks sollen Werte vom Typ int speichern.

Es soll immer wieder ein Wert auf den Stack legen und schauen, welches Element ganz oben auf dem Stack ist. Den Speicher wieder freigeben und schauen, welches Element nun auf dem Stack liegt.

Also erstellte ich Zeiger, die auf die jeweiligen Elemente zeigen. Sobald die Funktion pumped_it_up aufgerufen wird, verändert sich der Zeiger und zeigt auf etwas anderes. Wenn man nun alle Elemente speichert, sind sie nicht mehr zugreifbar. Zunächst dachte ich, ich sei nur müde, aber auch jetzt nach einem guten Schlaf, sehe ich meinen Fehler/misslungen Gedanken nicht.

Ich habe den Fehler eingegrenzt und immer wieder sequentielle Ausgaben gemacht und es liegt an der pumped_it_up - Funtkion aber ich begreife es einfach gerade überhaupt nicht. Ich stehe total auf dem Schlauch...



03/13/2015 16:52 Logtetsch#2
Code:
void push(int val) {
     Element_stack new_elem(val);
     if(head == NULL)
          head = &new_elem;
     else {
          new_elem.set_next(head);
          head = &new_elem;
}
new_elem wird beim verlassen der Funktion zerstört.
Ich hab deinen Code nur schnell überflogen, allerdings sollte das passen:

Code:
if(!head)
     head = new Element_stack(val);
else{
     Elemt_stack* pTmp = head;
     head = new Element_stack(val);
     head->set_next(pTmp);
}
03/13/2015 21:23 C_O_R_E#3
Am liebsten würde ich mein Kopf in Sand stecken.... Das ist so was von nachvollziehbar, da denkt man einmal nicht an den Gültigkeitsbereich und dann passiert das.

Die Lösung hättest du nicht wirklich angeben müssen, aber dennoch vielen vielen Dank.