Problem in einfach verketteter Liste: Pointer-Übergabe fehlerhaft.
-
Hallo Leute,
ich habe ein Problem mit meiner verketteten Liste. Wie schon im Titel dargestellt scheint die Pointer-Zuweisung nicht ganz zu klappen, wie ich es mir vorstelle.
Ich zeige euch erst einmal den Code:
(Er ist für die bessere Übersicht auf das Nötigste reduziert)//-----NODE-Klasse----- class Node { public: Node(int); private: Node *next; }; void Node::setNext(Node *n){next = n;} Node* Node::getNext(){return next;} //-----LIST-Klasse----- class List { public: void add(int); private: Node *root; }; void List::add(int c) { Node* n = new Node(c); if(root == 0) root = n; else { Node* tmp = root; while(tmp->getNext() != 0) tmp = tmp->getNext(); tmp->setNext(n); } }Das Programm hängt sich in einer Endlos-Schleife auf, wenn ich versuche, drei oder mehr Nodes hinzuzufügen.
Den Fehler konnte ich schon eingrenzen: Er muss in der while-Schleife liegen. Ich nehme stark an, dass er in Zeile 31 liegt. Wahrscheinlich zeigt tmp die ganze zeit auf root.
Es wäre toll, wenn mir jemand auf die Sprünge helfen könnte, wie ich den Pointer richtig übergebe.Info: Ich nutze Dev-C++ 4.9.9.2. (bitte nicht hauen
)MfG, Dirt Devil
-
DirtDevil schrieb:
Er ist für die bessere Übersicht auf das Nötigste reduziert
Vermutlich ist auch der entscheidende Abschnitt von dannen.

Du prüfst jeweils root und next auf 0 bzw !=0. Werden die Zeiger in den jeweiligen Konstruktoren der Objekte auch mit 0 initialisiert?
Könnte sein, dass du das nicht machst und somit vagabundierende Zeiger hast die dann irgendwann zum Absturz führen.
-
Vielen Dank, Mr. Tipp

Genau das war das Problem! root hatte ich schon mit 0 initialisiert, next allerdings war ohne Ziel.
Ich gehöre zu den Leuten, die sich von Java aus auf C++ zubewegen, dabei wird man von der Pointer-Wirtschaft regelrecht erschlagen. In Java hat jedes deklarierte Objekt schon einen null-Zeiger; ich dachte, das wäre auch in C++ so. Naja, nachher ist man immer schlauer
Und in Zukunft werd ich auch wenigstens noch die Konstruktoren mitposten :p
Nochmals vielen Dank!!!!MfG, Dirt Devil