ハッシュ テーブル実装 UThash を使用しています。
プリミティブを使用して要素を挿入しています:
HASH_ADD(hh,hash_table,key,keylen,elem);
そして、プリミティブで要素を取得します:
HASH_FIND(hh,hash_table,key,keylen,elem);
なんらかの理由で、関数を呼び出すときにハッシュ検索の動作が変更されています。つまり、uthash は table に存在する要素を見つけられません。
なんらかの形でメモリが侵害されていると思われます。
この失敗をトリガーする関数は、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() が失敗し始めます 。
残りのコードはすべて完全かつ正しく実行されます。
私の明らかな質問は、何がそのようなタイプの失敗を引き起こす可能性があるかということです.
読んでいただきありがとうございます。追加情報があればお気軽にお尋ねください。