2016-04-08 9 views
-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; 
} 

答えて

0

iptrptrのそれぞれの新しい非NULL値のために再初期化する必要があります。

+0

だから 'iptr = ptr-> things'は正しいのですか? 'ptr'ループの中で' ptr = ptr-> next'の直後にこれを追加すると、直ちにsegフォルトが発生します。それが追加されるべき場所ですか? –

+0

'ptr'がnullでないことを知っているポインタループの先頭で初期化を試してください。 – PerpetualStudent

+0

それは動作します!みんなありがとう。 –

関連する問題