Am Dienstag, 4. Mai 2004 13:39 schrieben Sie:
Hallo Matthias,
ich habe das Programm jetzt abgeändert und es funzt auch sehr gut. Aber wo sind denn noch Fehler, damit ich sie nachvolliehen kann? Die STellen im Code würden reichen.
1) reset(...) Der Nutzen dieser Funktion ist mir schleierhaft. Soll sie die Liste loeschen? Wenn "ja", tut sie das nicht. 2) delete(...) a) Immer noch reservierst du unnoetig Speicher. b) Das erste Element der Liste benoetigt bei meinem Vorschlag eine Sonderbehandlung. (Spielt zwar in diesem speziellen Fall keine Rolle, sollte dennoch behandelt werden. Siehe aber auch 4) ) 3) ausgabe(...) a) Noch ein unoetiges malloc b) statt do{...}while ein while{...}, sonst stuerzt das Programm bei leeren Listen ab. c) Falls du deine Implementierung dahingegen aenderst, wie es in 4) vorgeschlagen ist, solltest du darauf achten nicht mehr l->anf auszugeben. 4) einlesen(...) Die ganze if-Abfrage kannst du loeschen: for(i=1;i<=N_MAX;i++){ t = (liste_el*)malloc(sizeof(liste_el)); t->wert = i; t->next = NULL; l->ende = t; } Wenn du das so machst ist in l->anf nie ein Wert gespeichert was Vorteile haben kann (Dein delete() funktioniert ohne Extrabehandlung des 1. Elements.) 5) suche(...) Kann wieder abstuerzen, wenn kein Element mit Wert 0 folgt. Besser: if( !t ) return NULL; do { t = t->next; } while( t && t->wert==0) ; 6) algo(...) a) Und noch ein voellig unoetiger malloc! b) t=l->anf; t = t->next; Was wenn l->anf=NULL? c) while(((t->wert)* ... Was wenn t=NULL? Soweit ich das sehe - und wenn ich hier keinen Mist gebaut habe - sollte es das im grossen und ganzen sein.