課題で登録された名前、番地を要素としたリスト構造からなるリストを、名前で検索する関数SearchListを作成しています。もし一致するものがあれば番地である変数idを返し、それ以外は何も返さないという関数です。
ただ、この状態で関数を使用するとSegmentation faultになってしまいます。exitの使い方があまり分かっていないため、このような使い方でよいのか教えていただきたいです。よろしくお願いいたします。
C
1int SearchList(node *list, char *id) { 2 node *p = list->next; 3 4 while(p != NULL) { 5 if((strcmp(p->id, id)) == 0) { 6 return (p->num); 7 } 8 p = p->next; 9 } 10 printf("ident not find.\n"); 11 exit(0); 12} 13 14/*node = リスト構造*/ 15typedef struct _node{ 16 char id[15]; 17 int num; 18 struct _node *next; 19}node;
関数を呼んでいる側のコードも貼って下さい
list か id が NULL か不正なアドレスを指しているんじゃないでしょうか。そうでなければ各ノードの初期化に失敗しているか。
SearchListの引数に何を渡しているか判らないと何とも言えません。呼び出し側の処理も開示してみてください。
そもそもノードを初期化してない。そのため、
> while(p != NULL) {
のループを抜けることが無く、不正アクセスになるとか、、。
segmentation faultとexit()はどのように結びつくのでしょうか。
他の間違いの結果としてならともかく、returnやexit()がsegmentation faultの原因になることは非常に考えにくいです。
> int SearchList(node *list, char *id)
こいつに引き渡すlistがNULLだったらおかしなことが起こりそうですが...
コンパイラは何でしょう? printf()でも入れてlistの値を確認しましょう。
回答1件
あなたの回答
tips
プレビュー