2012-02-20 4 views
-1
void addWord(char *word, bucket **bkt, int size) 
{ 
    bucket *node, *auxNode; 

    if(findWord(word, bkt[hash(word, size)]) == 1) 
    { 
      return; 
    } 

    node = (bucket*) malloc (sizeof(bucket)); 
    node->data = (char*) malloc (strlen(word) * sizeof(char)); 
    memset(node->data, 0, strlen(word)); 
    sprintf(node->data, "%s", word); 

    if(*bkt == NULL) 
     { 
     node->next = NULL; 
     *bkt = node; 
    } 
    else 
    { 
     auxNode = (bucket*) malloc (sizeof(bucket)); 
     auxNode = *bkt; 
     while(auxNode->next != NULL) 
     { 
      auxNode = auxNode->next; 
     } 
     node->next = NULL; 
     auxNode->next = node; 
    } 
} 

int main(int argc, char **argv) 
{ 
............ 
bkt = (bucket**) malloc (*sizeHash * sizeof(bucket*)); 
for(i = 0 ; i < (*sizeHash) ; i++) 
{ 
    printf("%d\n", i); 
    bkt[i] = NULL; 
} 
......... 
    if(bkt[hash(pch, *sizeHash)] == NULL) 
    { 
     printf("NULL: %s -> %d\n",pch, hash(pch, *sizeHash)); 
     bkt[hash(pch, *sizeHash)] = NULL; 
    } 
    addWord(pch, &bkt[hash(pch, *sizeHash)], *sizeHash); 

いつも、それは、ノードsendがNULLであることを意味します。しかし、2回挿入した後、3回目に入りますが、addWordではNULLにならずに到着します(findWordの前にprintfを入れます)。なぜこのようなことが起こるのか分かりません。これはハッシュテーブルで、hash()はDan Bernsteinのdjb2です。誰かがNULLポインタがaddWord()で送られない理由を教えてもらえますか?ポインタNULLの問題

+0

あなたは以前にいくつかの質問をしてきましたが、いつも答えを得ました。しかしあなたはそれらの答えのどれも(決して受け入れていない)(http://stackoverflow.com/faq#howtoask)。あなたはそうするべきです。それは答えが役に立ったことを丁寧に認識する方法です。 – ruakh

答えて

0

は確かにこれ:

if(findWord(word, *bkt) == 1) 

if(findWord(word, bkt[hash(word, size)]) == 1) 

は、このことになっていますか?それすでにポイントwordのハッシュエントリに:

addWord内部bktmainから&bkt[hash(pch, *sizeHash)]であることを覚えておいてください。

+0

それは問題だった、ありがとう! –

+0

あなたはようこそ! – ruakh

+1

これがあなたの質問に答えた場合、正しい/有益な回答としてあなたは[これを受け入れることを望むかもしれません](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Bart