D
zoro schrieb:
Ok das verstehe ich.
Aber warum kann ich nicht auch einfach:
Tail->next = Neu;
machen?
anstatt:
Tail->next=malloc(sizeof(*Tail->next));
*Tail->next=*Neu;
Überleg mal: wenn das Objekt, auf das Neu zeigt, aus irgendeinem Grund verloren geht (weil, sagen wir mal, der Programmierer ein Objekt auf dem Stack erstellt, und dann deine Funktion mit dem Objekt aufruft, und da die Adresse gespeichert wird, und danach die Funktion zurückkehrt). Dann ist das Objekt weg, und dein Zeiger zeigt ins Nirvana. Und nicht in die gute Art von Nirvana (NULL), sondern in die böse Art von Nirvana - der, der man nicht ansieht, dass sie ins Nirvana zeigt.
Deswegen macht man in der Regel eine tiefe Kopie des Objekts innerhalb der Routine. Das ist aber für manche Anwendungsgebiete echt langsam (einmal malloc kann mehrere tausend Prozessorcycles einfach so verhauen!). Deswegen sollte man (meine Meinung zumindest) zwei Funktionen beifügen: eine, die das Objekt kopiert, und eine, die es direkt speichert. Damit faule Programmiere ihre Sachen auf dem Stack verwalten und gute Programmiere eine ordentliche Speicherverwaltung hinter der Liste aufbauen können.