Printf for hash

问题描述 投票:0回答:1

它的继续 小字典的哈希. 现在似乎散列工作了,但当我试图显示任何桶时,在显示单词后出现 "分割错误"。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
#include <string.h>

#include "hash.c"
#include "dictionary.h"

#define LENGTH 45
#define DICTIONARY "dictionaries/small"


int main(void)
{
  char* dictionary = DICTIONARY;
  FILE* fd = fopen(dictionary, "r");
  char h[LENGTH];
  while(true)
  {
    char* c = fgets(h,sizeof(h),fd);
    if (c == NULL)
      {
         if ( feof (fd) != 0)
         {
            printf ("\nEOF\n");
            break;
         }
         else
         {
            printf ("\nERROR\n");
            break;
         }
      }
      int hashedValue = hash(c);
      //printf("%d\n", hashedValue);
      insert(hashedValue, c);
  }
node* ptr = first[6];  //trying to display any 
while(!NULL)
{
 printf("%s", ptr->name);
 ptr = ptr->next;
}

fclose (fd);
}
c dictionary hash linked-list
1个回答
2
投票

替换

while(!NULL)

while ( ptr != NULL )

while ( ptr )

你要确保 ptr 不含 NULL 值,然后再继续。 while(!NULL) 评估为 while(1)所以循环会 "永远 "重复(或者直到你尝试访问你不拥有的内存)。

© www.soinside.com 2019 - 2024. All rights reserved.