私は次のような2つの構造を持っています:
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
ので、最初は見つからないことがわかり、そのキーの2番目の検索でelse
ブロックが入力されます。
興味深いことに、HASH_ITER を使用してエントリを反復処理すると、少なくともクラッシュすることなく「機能する」ように見えますが、すべての値が同じであるとは確信していません。