【问题标题】:Pointer NULL issues指针 NULL 问题
【发布时间】:2012-03-11 03:20:01
【问题描述】:
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);

每次进入那个if,表示节点send为NULL;但是在两次插入之后,第三个虽然输入了 if,在 addWord 中它到达的不是 NULL(我在 findWord 之前放了一个 printf)。我不明白为什么会这样。这是一个哈希表,hash() 是 Dan Bernstein 的 djb2。有人能告诉我为什么 NULL 指针没有在 addWord() 中发送吗?

【问题讨论】:

  • 你已经问过几个问题了,而且总能得到答案;但你从来没有accepted 任何这些答案。你应该这样做:这是承认答案有帮助的礼貌方式。

标签: c visual-studio-2010 pointers hashtable


【解决方案1】:

肯定是这样的:

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

应该是这样的:

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

?

请记住,addWord 中的bkt 是来自main&amp;bkt[hash(pch, *sizeHash)]:它已经指向word 的哈希条目。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多