首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HASH_FIND_STR上UTHash多级哈希表崩溃

HASH_FIND_STR上UTHash多级哈希表崩溃
EN

Stack Overflow用户
提问于 2013-04-10 08:59:05
回答 1查看 1.4K关注 0票数 1

我有两个这样的结构:

代码语言:javascript
复制
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;
}

在我的代码中,我这样做

代码语言:javascript
复制
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()的seg错误。我是不是做错了什么?在这个例子中,假设my_item1和my_item2来自其他地方并且是有效的。我想使用stringkey作为键来查找这些值。

我在条件的IF部分放了一个断点,所以我知道一开始没有找到它,然后在第二次查找那个键时,进入了else块。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 11:49:06

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

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

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

特洛伊

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15915187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档