verkette Liste löschen
-
Wenn ich eine kurze Liste habe, kann ich sie ohne Probleme löschen. Wenn sich jedoch mehr als 5 Datensätze darin befinden, Kommt beim Aufruf der Funktin zum Löschen der Liste folgende Fehlermeldung:
Unbeahndelte Ausnahme: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
ar free(VOID* )
at loesche_all(person* anfang)
at main()Hier die Funktion:
struct ware * loesche_all_ware(struct ware *anfang) { struct ware *zeiger, *zeiger1; if(anfang != NULL) { zeiger=anfang->next; while(zeiger != NULL) { zeiger1=anfang->next->next; anfang->next=zeiger1; free(zeiger->next); free(zeiger); zeiger=zeiger1; } free(anfang->next); free(anfang); anfang=NULL; printf("\n\nListe wurde erfolgreich gel\224scht!\n\n"); return anfang; } else printf("\n\nKeine Liste zum l\224schen vorhanden\n\n\a"); return anfang; }
struct ware { char name[MAX]; char hersteller[MAX]; float preis; struct ware *next; };
-
weiss zwar nicht wie deine liste genau organisiert ist aber normalerweise würde ich etwa so vorgehren:
void loesche_all_ware(struct ware *anfang) { struct ware *tmp; while ( NULL != anfang) { tmp=anfang->next; free(anfang); anfang = zeiger; } }
Kurt
-
Hi, danke dir. Ist natürlich viel einfacher. Hast bloß einen kleinen Schreibfehler drin. Außerdem ging es bei mir erst, wenn ich den anfang der Liste wieder zurückgebe, also so:
struct ware * loesche_all_ware(struct ware *anfang) { struct ware *tmp; while ( NULL != anfang) { tmp=anfang->next; free(anfang); anfang = tmp; } }
-
sorry wg dem typo.
wenn du unbedingt etwas zurückgeben musst dann am besten so.struct ware * loesche_all_ware(struct ware *anfang) { struct ware *tmp; while ( NULL != anfang) { tmp=anfang->next; free(anfang); anfang = tmp; } return NULL; }
Kurt