2017-12-02 7 views
0

2dリンクリストを作成しようとしています。その要素にアクセスしようとすると、セグメント化エラーが発生します。ここで2dリンクリスト要素の作成方法とアクセス方法

は、私はいくつかのデバッグを作っコード

struct Node{ 
    char *data; 
    int count; 
    struct Pair *p; 
    struct Node *next; 
}; 

struct Pair{ 
    char *data; 
    int count; 
    struct Pair *next; 
}; 

void insertPairs(char *word1, char *word2, struct Node **head){ 
struct Node *ptr = *head; 

while(ptr != NULL) { 
    if(strcmp(ptr->data, word1) == 0){ 
     struct Pair *pairPtr = ptr->p; 
     while(pairPtr != NULL){ 
      if(strcmp(pairPtr->data, word2) == 0){ //Segmentation Fault 
       pairPtr->count = pairPtr->count + 1; 
       break; 
      } 
     } 
     struct Pair *tmp = (struct Pair*) malloc(sizeof(struct Pair)); 
     tmp->data = word2; 
     tmp->count = 1; 
     tmp->next = pairPtr; 
     pairPtr = tmp; 
     break; 
    } 
    ptr = ptr->next; 
} 

} 

の一部です。

if(strcmp(ptr->data, word1) == 0)が動作しますが、上記されていないのはなぜこの行は私にif(strcmp(pairPtr->data, word2) == 0)

をセグメンテーションフォールトを与えますか?これを修正するにはどうすればよいですか?

答えて

0

あなたが提供したコードを見ると、私は問題を検出できませんでした。 word2またはpairPtr->dataのいずれかがヌルポインタであるか、ヌルで終了するバイト文字列へのポインタではない可能性がありますか?その場合、その動作は未定義であり、セグメンテーション・フォルトを引き起こす可能性が非常に高い。

チェックアウト:http://en.cppreference.com/w/c/string/byte/strcmp

+0

問題はpairPtr-> data' 'ですが、それは' NULL'すべきではないので、 'while'文で' NULL'チェックがあります。 – Pareidolia

+0

'while'ステートメントでは、' pairPtr'が 'NULL'でないことだけを確認します。その中の 'data'フィールドが' NULL'ではないことを確認しません。 – LiranT

関連する問題