我正在使用哈希表實現UThash。調用函數會使UThash失敗
我使用插入元素的原始:
HASH_ADD(hh,hash_table,key,keylen,elem);
和檢索與基本元素:
HASH_FIND(hh,hash_table,key,keylen,elem);
出於某種原因,我不知道,哈希查找的行爲被修改當我調用一個函數。也就是說,uthash未找到存在於表中的元素。
我懷疑內存已經在某種程度上被破壞。
觸發此故障不需要執行任何代碼使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()相同的行爲發生。在我致電func1()後,hash_find()開始失敗。
所有其餘的代碼是完美和正確地執行。
我明顯的問題是什麼可能導致這種類型的失敗?
感謝您的閱讀並隨意問任何其他信息。
相當古老的問題,但似乎我遇到了完全相同的問題。我知道沒有多個項目具有相同的鍵(在構建哈希表時進行檢查和驗證),但在另一個函數內調用「HASH_FIND」函數失敗。爲了弄清楚爲什麼,我一直在摸索着我的頭腦。我甚至可以通過迭代整個表來找到密鑰,但FIND卻無法做到這一點!任何線索可能是什麼原因? –