我想使用hsearch_r添加指向哈希表的指针。目前它使用以下代码段(没有变量声明和检查)不起作用:
// Allocate hash table
htab = calloc( INITIAL_HASH_SIZE, sizeof(struct hsearch_data) );
hcreate_r( INITIAL_HASH_SIZE, htab );
// Add first pointer to hash table
he.key = (char *)&pointer_some_complex_struct1;
if ( hsearch_r( he, FIND, &hep, htab ) == 0) {
he.data = pointer_some_complex_struct1->data;
hsearch_r( he, ENTER, &hep, htab );
}
// Add second pointer to hash table
he.key = (char *)&pointer_some_complex_struct2;
if ( hsearch_r( he, FIND, &hep, htab ) ) {
// CODE ENTERS HERE
}
第二个调用找到该对象,无论它是否存在。任何想法可能是上述代码段的问题?
答案 0 :(得分:4)
问题是hsearch / hsearch_r中的键是以NUL结尾的字符串,而不是任意数据。