这是小字典哈希的延续。现在看起来散列正在工作,但是当我尝试显示任何存储桶时 - 显示单词后存在"分段错误"。
#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 ("nEOFn");
break;
}
else
{
printf ("nERRORn");
break;
}
}
int hashedValue = hash(c);
//printf("%dn", hashedValue);
insert(hashedValue, c);
}
node* ptr = first[6]; //trying to display any
while(!NULL)
{
printf("%s", ptr->name);
ptr = ptr->next;
}
fclose (fd);
}
替换
while(!NULL)
与任一
while ( ptr != NULL )
或
while ( ptr )
在继续之前,您需要确保ptr
不包含NULL
值。while(!NULL)
的计算结果为while(1)
,因此循环"永远"重复(或直到您尝试访问您不拥有的内存(。