此函數是散列表的一部分。我正在傳遞一個散列表來搜索和一個關鍵字。初始化Valgrind錯誤
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號線的代碼以「爲」開始的行)。
我覺得我已經初始化了struct ent
和傳入的哈希列表。怎麼了?
將你的分割分割爲sep。所以你可以看看它的'h-> table'或'x'是否給你一個問題,然後回來。 – John3136
您正在將內存分配給'x',然後立即在'for'循環中重新分配'x',以便泄漏內存。 –
我的猜測是這個問題實際上位於'HashSearch'之外。 'key'肯定是空終止的? h-> table'中的所有條目以及它們的成員('pos','next'和'num')是否已初始化? – jerry