0
リンクリストからノードを削除する削除機能を作成しようとしています。構造と関数の定義は次のとおりです。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
の新しいヘッドを2番目のノードに移動すると、それがなぜ問題を引き起こすのか理解できません。誰でも私を助けてくれますか?あなたのコメントパー
この関数の呼び出しで問題が発生している可能性があります。呼び出し元で、この関数が返す値でリストの先頭を更新していますか?私。 'dogs = delete_from_list(dogs);' –
私が関数を呼び出すと、私は犬を指すポインタ '* dog_list'を持っています。これは私が 'delete_from_list(dog_list);'を持っているものです。 – salmon1407
デバッガ............... –