我正在使用哈希表实现 UThash。
我正在使用原语插入元素:
HASH_ADD(hh,hash_table,key,keylen,elem);
并使用原语检索元素:
HASH_FIND(hh,hash_table,key,keylen,elem);
出于某种我不知道的原因,当我调用函数时,哈希查找的行为正在被修改。也就是说,uthash 没有找到 table 中存在的元素。
我怀疑记忆在某种程度上受到了损害。
触发这个失败的函数不需要执行任何代码使UThash失败:
//Note: ct = custom_type
int func1(ct1 *ptr1, ct2 *ptr2, ct3 *ptr3,char **buffer,size_t *size)
{
HASH_FIND(...) //does not work
/**
* code
*/
return 0;
}
int func2(ct1 *ptr1,ct2 *ptr2,ct3 *ptr3)
{
char *buffer;
size_t buf_size;
/**
* code
*/
HASH_FIND(...) // works!
if(func1(ptr1,ptr2,ptr3,&buffer,&buf_size)){
//code
}/*error*/
return 0;
}
int func3(ct1 *ptr1,ct2 *ptr2,ct3 *ptr3)
{
char *buffer;
size_t buf_size;
HASH_FIND(...) // works!
if(func1(ptr1,ptr2,ptr3,&buffer,&buf_size)){
//code
}/*error*/
/**
* code
*/
return 0;
}
因此在func2()和func3()中都会发生相同的行为。hash_find() 在我调用func1()后开始失败 。
所有其余的代码都完美且正确地执行。
我明显的问题是什么会导致这种类型的失败?
感谢您阅读并随时询问任何其他信息。