我有两个这样的结构:
struct item2_map{
char stringkey[MAX_SIZE];
UT_hash_handle hh;
}
struct item1_map{
int key1;
struct item2_map *item2_map;
UT_hash_handle hh;
}
在我的代码中,我做了这样的事情
struct item1_map *retrieved;
struct item2_map *found_value, *tmp;
HASH_FIND(hh, hash_head, key1, &someintvalue, sizeof(int), retrieved)
if(retrieved==NULL)
{
HASH_ADD(hh, hash_head, key1, sizeof(key1), my_item1);
my_item1->item2_map = NULL;
HASH_ADD_STR(my_item1->item2_map, stringkey, my_item2);
} else
{
//THIS WORKS
HASH_ITER(hh, retrieved->item2_map, found_value, tmp)
{ //do something }
//THIS SEG FAULTS
HASH_FIND_STR(retrieved->item2_map, &my_item2->stringkey, found_value)
}
这似乎给了我 HASH_FIND_STR() 的段错误。有什么我做错了吗?在此示例中,假设 my_item1 和 my_item2 来自其他地方并且是有效的。我想使用 stringkey 作为键来查找值。
我在条件部分放了一个断点IF
,所以我知道一开始没有找到它,然后在第二次找到那个键时,else
进入了块。
有趣的是,如果我使用 HASH_ITER 遍历条目,它似乎“工作”至少没有崩溃,尽管我不相信所有的值都是相同的。