前提・実現したいこと
c言語によって特定の値を持つノードを削除することができる双方向連結リストを実装しようとしています。
発生している問題・エラーメッセージ
対象となるノードが存在しない場合には「存在しない」と返したいのですが、segmetation faultと出てしまいます。
該当のソースコード
#include<stdio.h> #include<stdlib.h> struct list{ int key; struct list *next,*prev; }; struct list *root; struct list *p; struct list *list; //ノードを作成し、先頭につなげる void insert(int x){ p=malloc(sizeof(struct list)); if(p!=NULL){ p->key=x; p->next=root;//それまでrootが指していた内容 p->prev=NULL; p->next->prev=p; root=p; } } //入力された値を探索し、発見すれば削除する void delete(int x){//探索して、一致すれば削除 list=root; printf("delete %d\n",x); while(list->key!=x && list!=NULL){ list=list->next; } //対象のノードが存在しなかった場合 if(list==NULL){ printf("キーは存在しない"); } //対象のノードが存在した場合 list->prev->next=list->next; list->next->prev=list->prev; } int main(){ int i,k; //先頭ノード(ダミー)作成 p=malloc(sizeof(struct list)); p->next=NULL; p->prev=NULL; root=p; //先頭にノードを追加 for(i=0;i<10;i++){ insert(i); } for(i=0;i<10;i++){ printf("削除するキーを選択:"); scanf("%d",&k); delete(k); list=root; while(list->next!=NULL){ printf("%d",list->key); list=list->next; } printf("\n"); } return 0; }
ここにより詳細な情報を記載してください。