PThreads和Malloc导致无法访问的内存

时间:2014-09-29 21:15:25

标签: c multithreading pthreads malloc

我有一个哈希表,利用线程插入元素。每个哈希桶都是互斥锁,以便线程在该桶内添加/遍历哈希链。每次调用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;
}

0 个答案:

没有答案