0

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
}

2 番目の呼び出しは、オブジェクトが存在しない場合でもオブジェクトを見つけます。上記のコード セグメントで何が問題になる可能性がありますか?

4

1 に答える 1

4

問題は、hsearch/hsearch_r のキーが任意のデータではなく、NUL で終わる文字列であることです。

于 2012-11-19T15:04:36.923 に答える