Ich versuche, eine Löschfunktion zu schreiben, die Knoten aus einer verknüpften Liste löscht. Die Struktur und Funktionsdefinition sind unten:C- Doppelfreier Fehler beim Versuch, den ersten Knoten in der verknüpften Liste zu löschen
struct dog{
int number;
char dog_name[NAME_LEN+1];
char owner_last_name[NAME_LEN+1];
char breed[NAME_LEN+1];
struct dog *next;
};
struct dog *delete_from_list(struct dog *dogs)
{
struct dog *cur, *prev;
int delete_number;
printf("\nEnter the patient number of the dog you want to delete: ");
scanf("%d", &delete_number);
for(cur = dogs, prev = NULL; cur != NULL && (cur->number != delete_number);
prev = cur, cur = cur->next)
;
if(cur == NULL)
{
printf("Dog not found.\n"); /*dog not found in list*/
return dogs;
}else if(prev==NULL)
{
dogs = dogs->next; /*dog now points to the second node*/
}else
prev->next = cur->next; /*dog is in another node*/
printf("Deleted: Dog name: %s, Breed: %s, Owner's last name: %s\n",
cur->dog_name, cur->breed, cur->owner_last_name);
free(cur);
return dogs;
}
Wenn ich das Programm ausführen, funktioniert die Löschfunktion, bis ich versuche, den ersten Knoten zu löschen. Ich habe meinen Debugger verwendet und festgestellt, dass dogs = dogs->next;
ist, wo der Fehler auftritt, aber ich verstehe nicht, warum das ein Problem verursacht, wenn ich den neuen Kopf von dogs
auf den zweiten Knoten verschiebe. Kann mir bitte jemand helfen?
Das Problem könnte in dem Aufruf dieser Funktion sein. Sind Sie sicher, dass Sie im Listener den Listenkopf mit dem Wert aktualisieren, den diese Funktion zurückgibt? I.e. 'dogs = delete_from_list (dogs);' –
Wenn ich die Funktion anrufe, habe ich einen Zeiger, '* dog_list', der auf Hunde zeigt. Das habe ich 'delete_from_list (dog_list);'. – salmon1407
Debugger ............... –