Verkettete Liste und Pointer
-
Hallo und guten Abend,
Ich habe ein kleines Problem mit einem Pointer.
Ich möchte gerne eine Verkettete Liste in einer Funktion verändern. Meine Idee war folgende, das funktioniert jedoch nicht:void main(void){ verkettete_liste *liste = NULL; changeFunktion(list); } void changeFunktion(verkettete_liste *liste){ verkettete_liste *neue_liste = NULL; ... ... ... liste = neue_liste; }
In der Funktion selber wird der Wert laut Debugger verändert. Im main jedoch sind die Daten anschliessend wieder weg.
Kann mir hier jemand auf die Sprünge helfen?
-
Du übergibst auch nur eine Kopie des Zeigers auf die Liste... Du willst aber nicht den Wert an der Adresse auf die Liste zeigt ändern sondern liste auf eine andere Adresse zeigen lassen...
==> Übergabeparameter wird vom zeiger zum zeigerzeiger...
Gruß
zeigerzeiger
-
Danke erstmal, auch das habe ich schon probiert und es sieht folgendermassen aus:
void main(void){ verkettete_liste *liste = NULL; changeFunktion(&list); } void changeFunktion(verkettete_liste **liste){ verkettete_liste *neue_liste = NULL; ... ... ... liste = &neue_liste; }
Jedoch funktioniert dies auch nicht. Was ist denn dabei genau mein Fehler, habe ich etwas am Zeigerkonzept falsch verstanden?
-
du musst dem alten zeiger (funktionsparameter) einen wert zuweisen, genau so:
*liste=neue_liste
-
eddi schrieb:
*liste=neue_liste
Das funktioniert leider auch nicht. Wenn ich das mache, stürzt das Programm ab.
Kann es sein das ich für *liste noch Speicher allozieren muss? Wäre ja voll sinnlos da ich das schon für neue_liste gemacht habe und eigentlich nur die Referenz darauf Umkopieren will.
-
wenn schon eine liste in main existiert dann musst du nix mehr allozieren. allerdings musst du dir dann immer merken welches element momentan das erste ist. und dann funtzt die methode schon.