Ich habe eine Zuordnung, die erfordert, dass wir eine doppelt verknüpfte List-Klasse implementieren. Aus irgendeinem Grunde definierte sie den Knoten struct
wie folgt:Doppelt verknüpfte Listen in C++
struct node {
node *next;
node *prev;
T *o;
};
Es scheint mir, dass es viel einfacher sein würde, um die Klasse zu schreiben, wenn die struct Mitglied ‚Daten‘ kein Zeiger sind. Unnötig zu sagen, dass ich es nicht ändern kann, also werde ich es einfach umgehen müssen. Ich habe versucht, das Verfahren implementiert, die ein Element an den Anfang der Liste hinzufügt, wie folgt:
template <typename T>
void Dlist<T>::insertFront(T *o) {
node *np = new node;
T val = *o;
np->o = &val;
np->prev = NULL;
np->next = first;
if (!isEmpty()) {
first->prev = np;
} else {
last = np;
}
first = np;
}
Während debuggen ddd Verwendung erkannte ich, dass alles funktioniert das erste Mal, wenn Sie eine Nummer einfügen, aber beim zweiten Mal wird alles verschraubt, seit du 'val' auf das neue Element gesetzt hast, "überschreibt" es das erste, da die Speicheradresse von val benutzt wurde. Ich habe versucht, andere Dinge zu tun, wie, anstatt nur die ‚val‘ Variable, die Sie folgendermaßen vorgehen:
T *valp = new T;
T val;
valp = &val;
val = *o;
np->o = valp
Dies nicht zu funktionieren schien. Ich denke, das liegt daran, dass es nur eine kompliziertere Form dessen ist, was ich oben nur mit einem zusätzlichen Speicherleck gemacht habe :)
Irgendwelche Ideen/Zeiger in die richtige Richtung wären toll.
+1 für die ehrenvollen Hausaufgaben Haftungsausschluss. –
Werfen Sie einen Blick darauf, die erste Antwort kann Ihnen helfen, das Problem zu verstehen: http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-can-be -done-to-overover – Dan
Wenn Sie eine Chance bekommen, werfen Sie einen Blick auf diese auch: http://StackOverflow.com/Questions/599308/proper-Stack-and-Heap-usage-in-C - Unterschied zwischen Stack und Heap-Zuweisung. – Dan