我有一个哈希表,利用线程插入元素。每个哈希桶都是互斥锁,以便线程在该桶内添加/遍历哈希链。每次调用insert_word函数时,函数都会生成一个线程,然后返回。然后,线程负责搜索放置数据的位置并在必要时分配存储器。
该表的目的是计算文本文档中单词的出现次数。该实现适用于小文件大小(~5kb),但在使用更大的文件(25kb)进行测试时,程序会出现段错误。
使用GDB,它显示程序段错误在以下行:
if(!strcmp(next->word, word))
接下来打印显示它有一个地址(有时为0x20,有时为0x530000007365,有时为0x64,有时为0x74656e),GDB表示无法访问next->字。
此位置应该已在以下位置进行了操作:<; p>
next = (struct hashEntry *)malloc(sizeof(struct hashEntry));
curr->next = next;
next->word = strdup(word);
next->count = 1;
看来内存已经分配,数据在该地址被访问和使用,为什么它突然无法访问?
编辑:应指定结构的内容
struct hashEntry {
char *word;
int count;
struct hashEntry *next;
}