gpt4 book ai didi

c - UTHash 多级哈希表在 HASH_FIND_STR 上崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:43 25 4
gpt4 key购买 nike

我有两个这样的结构:

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 block 被输入。

有趣的是,如果我使用 HASH_ITER 遍历条目,它似乎至少可以“工作”而不会崩溃,尽管我不相信所有值都是相同的。

最佳答案

看起来基本上是对的。需要仔细检查的几件事

  • 检查在创建 my_item1 时,在 HASH_ADD_STR 之前,my_item1->item2_map 是否初始化为 NULL
  • 检查 my_item2->stringkey 在 HASH_FIND_STR 之前是否以 null 结尾且小于 MAX_SIZE
  • 尝试在valgrind下运行看看是否还有其他线索

如果您发现了什么,请告诉我们。

特洛伊

关于c - UTHash 多级哈希表在 HASH_FIND_STR 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com