Указатель NULL выпусков - PullRequest
0 голосов
/ 20 февраля 2012
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, это означает, что отправка узла имеет значение NULL; Но после двух вставок, третья, хотя и входит в нее, если в addWord она приходит не NULL (я помещаю printf перед findWord) Я не понимаю, почему это происходит. Это хеш-таблица, hash () - это djb2 Дана Бернштейна. Может кто-нибудь сказать мне, почему указатель NULL не отправляется в addWord ()?

1 Ответ

0 голосов
/ 20 февраля 2012

Конечно это:

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

должно быть таким:

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

?

Помните, что bkt внутри addWord является1011 * из main: он уже указывает на хэш-запись для word.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...