-1
"add"関数の他に、私のプログラムは本質的にあります。 numItems関数は 'item'を入力として受け取り、各Playersのものを調べ、アイテムの量を加算します(存在する場合)。だから、私の問題は、プレイヤー1は3匹の犬を、プレイヤー2は5匹の犬を、機能は3だけカウントして終了するということです。 'iptr'がどの項目を表示しているかを出力するprintfを使ってデバッグしようとすると、その犬の2番目の発生を見つけるとseg faultが発生します。私はちょうどそこに簡単な解決策があるように感じる。リンクリスト内のノード項目を数えよう
typedef struct item {
char *name;
int count;
struct item *next;
} Items;
typedef struct player {
char *name;
Items *things;
struct player *next;
} Players;
int numItems(Players *list, char *item) {
Players * ptr = list;
Items* iptr = ptr->things;
int count = 0;
int i = 0;
while(ptr != NULL) {
while(iptr != NULL) {
if(strcmp(iptr->name, item) == 0) {
printf("first if: %s", iptr->name);
}
else {
i++;
}
iptr = iptr->next;
}
ptr = ptr->next;
}
return count;
}
だから 'iptr = ptr-> things'は正しいのですか? 'ptr'ループの中で' ptr = ptr-> next'の直後にこれを追加すると、直ちにsegフォルトが発生します。それが追加されるべき場所ですか? –
'ptr'がnullでないことを知っているポインタループの先頭で初期化を試してください。 – PerpetualStudent
それは動作します!みんなありがとう。 –