リストの削除について(構造体)
リストの削除のプログラムを実行して行ってみると、リストの削除処理中にプログラムが終わって変更後処理がうまく表示されません。どこが間違っているかが分からないしだいです。返答のほどよろしくお願いいたします。
#include<stdio.h>
#include<malloc.h>
#include<string.h>
struct list{
char name[20];
int age;
struct list *next;
};
void main(void)
{
struct list *head, *p, *n, *old;
char key[20];
/*ダミーノード作成*/
head = (struct list*)malloc(sizeof(struct list));
old = head;
while(p = (struct list*)malloc(sizeof(struct list)),
printf("name age入力\n"), scanf("%s %d", p -> name, &p -> age) != EOF){
old -> next = p;
old = p;
}
free(p);
old -> next = NULL;
p = head -> next;
printf("変更前リスト\n");
while(p != NULL){
printf("name:%s age:%d\n",p -> name, p -> age);
p = p -> next;
}
printf("削除key入力(name)\n");
gets(key);
n = head;
while(n != NULL){
old = n;
n = n -> next;
//printf("n -> name %s\n", n -> name);
if(strcmp(n -> name, key) == 0){
printf("%s削除\n", key);
//printf("n -> name %s old -> name %s\n", n -> name, old -> name);
old -> next = n -> next;
}
}
p = head -> next;
printf("変更後リスト\n");
while(p != NULL){
printf("name:%s age:%d\n", p -> name, p -> age);
p = p -> next;
}
}