Linked list
-
Hallo miteinander!
Ich habe eine Such-Methode in einer Linked List implementiert:
task_node* task_list::search_by_id(int id_) { if(task_node *n = 0) { return 0; } else if(n->get_id() == id_) { return n; } else { return search_by_id(++id_); } }Allerdings stürzt das Programm ab, wenn ich etwas per id_ suchen will.
Wieso? Was ist falsch? Und: Wie wäre es korrekt?Liebe Grüsse, Max
-
Nur geraten:
task_node* task_list::search_by_id(task_nose* n, int id_) { if(n == 0) { return 0; } else if(n->get_id() == id_) { return n; } else { return search_by_id(m->next,id); } }Wie genau es wäre, hängt davon ab, wie der Rest der Liste gebaut wurde. Das haste nicht erzählt.
-
Mhh...auch nur ne Vermutung, wann stürzt es denn ab, wenn du ne ID eingibst die es gibt oder is es nur wenn du eine eingibst die es nicht gibt...?
Lg freeG
-
Okey. Hab das korrigiert.
Aber schaut euch bitte mal den folgenden Code an:bool task_list::delete_by_id(task_node *n, int id_) { task_node *prev, *curr; int i = 0; if(n = NULL) { return false; } else { if(id_ > n->get_id()) { return false; } else { prev = NULL; curr = n; i = 1; while(i < id_) { prev = curr; curr = *curr->get_next_node(); i = i+1; } if(prev=NULL) { n = *curr->get_next_node(); free(curr); } else { *prev->get_next_node() = *curr->get_next_node(); free(curr); } } } return true; }Mein Compiler sagt: Funktion akzeptiert keine 1 Argumente
What the... Was ist falsch, wieso und wie wäre es richtig?
-
Über welche Funktion beschwert er sich denn?
(btw, was gibt eigentlich die get_next_node()-Methode zurück? So, wie du die hier verwendest, sieht es ein wenig seltsam aus.)
-
MaxC++ schrieb:
Mein Compiler sagt: Funktion akzeptiert keine 1 Argumente
What the... Was ist falsch, wieso und wie wäre es richtig?
Der sagt bestimmt auch, in welcher Zeile der Fehler ist ...
Und warum benutzt du free in C++?
-
Ahh..danke, wegen dem Hinweis mit der get_next_node

Hab den Fehler dort gefunden
..wegen dem free: Darf / Soll man das nicht verwenden?
-
MarcC++ schrieb:
Ahh..danke, wegen dem Hinweis mit der get_next_node

Hab den Fehler dort gefunden
..wegen dem free: Darf / Soll man das nicht verwenden?
Man verwendet normalerweise 'delete' in C++. Meistens ist RAII jedoch noch besser.
-
Sagen wir es so: Es ist nicht üblich

malloc()/free() stammt noch aus C und hat den großen Nachteil, daß es sich nicht um Konstruktoren bzw. Destruktoren der beteiligten C++ Objekte kümmert. Deshwegen verwendet man in C++ lieber new und delete für die Speicherverwaltung.
-
icarus2 schrieb:
MarcC++ schrieb:
Ahh..danke, wegen dem Hinweis mit der get_next_node

Hab den Fehler dort gefunden
..wegen dem free: Darf / Soll man das nicht verwenden?
Man verwendet normalerweise 'delete' in C++. Meistens ist RAII jedoch noch besser.
RAII? komisches buzzword

-
_-- schrieb:
icarus2 schrieb:
MarcC++ schrieb:
Ahh..danke, wegen dem Hinweis mit der get_next_node

Hab den Fehler dort gefunden
..wegen dem free: Darf / Soll man das nicht verwenden?
Man verwendet normalerweise 'delete' in C++. Meistens ist RAII jedoch noch besser.
RAII? komisches buzzword

Resource Acquisition Is Initialization. RAII ist dafür die Standardabkürzung

-
_-- schrieb:
RAII? komisches buzzword

SFINAE

-
MaxC++ schrieb:
Okey. Hab das korrigiert.
Aber schaut euch bitte mal den folgenden Code an:// dein codeVielleicht solltest du dir angewöhnen das VERGLEICHE AUF GLEICHHEIT mit == passieren und ZUWEISUNGEN mit =. Das passiert dir DREI mal, und das korrigierte Beispiel hast du (so siehts für mich aus) einfach Übernommen ohne es mit dem von dir geposteten zu vergleichen - dann hätte dir das Auffallen können.