此函数是哈希表的一部分。我正在传递一个要搜索的哈希列表和一个密钥。

int HashSearch (Hash_list h, char* key)
{
    struct ent *x = (struct ent *)malloc(10*sizeof(struct ent));
    for (x = h->table[hash(key, h->size)]; x!=0; x=x->next) {
        if (strcmp(x->pos, key)==0) {
            return x->num;
        }
    }
    return -1;
}

不幸的是,当我试着运行它时,valgrind总是给我错误
==1741== Conditional jump or move depends on uninitialised value(s)
==1741==    at 0x4018DE: HashSearch (Hash.c:81)
==1741==    by 0x400FA7: function (Nine13.c:181)
==1741==    by 0x4009D8: main (Nine13.c:54)
==1741==
==1743== Conditional jump or move depends on uninitialised value(s)
==1743==    at 0x4018DE: HashSearch (Hash.c:81)
==1743==    by 0x400FA7: function (Nine13.c:181)
==1743==    by 0x4009D8: main (Nine13.c:54)
==1743==

(第81行是以“for”开头的代码行)。
我觉得我已经初始化了struct ent和传入的哈希列表。发生了什么?

最佳答案

使用memset()清除内存,或使用函数calloc()而不是malloc()

07-28 03:05