Я пытаюсь написать функцию удаления, которая удаляет узлы из связанного списка. Структура и определение функции приведены ниже:C- Двойная ошибка при попытке удалить первый узел в связанном списке
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;
}
Когда я запускаю программу, то функция удаления работает, пока я пытаюсь удалить первый узел. Я использовал свой отладчик и узнал, что ошибка dogs = dogs->next;
возникает, но я не понимаю, почему это вызывает проблему, если я переведу новый заголовок dogs
ко второму узлу. Может ли кто-нибудь помочь мне, пожалуйста?
Проблема может быть в вызове этой функции. В вызывающем устройстве вы уверены, что обновляете головку списка со значением, возвращаемым этой функцией? То есть 'dogs = delete_from_list (dogs);' –
Когда я вызываю функцию, у меня есть указатель '* dog_list', который указывает на собак. Это то, что у меня есть 'delete_from_list (dog_list);'. – salmon1407
Отладчик ............... –