hfun
構造体内に保持されている関数へのポインターを使用して関数を呼び出そうとしています。
これらは型定義です:
typedef struct Table* TableP;
typedef struct Object* ObjectP;
typedef int(*HashFcn)(const void *key, size_t tableSize);
typedef struct Object {
void *key;
ObjectLink *top;
} Object;
typedef struct Table{
ObjectLink *linkedObjects;
size_t size, originalSize;
HashFcn hfun;
PrintFcn pfun;
ComparisonFcn fcomp;
} Table;
そして、ここで私は電話をかけようとしていますが、メモリ不足の場所にアクセスしようとしているというエラーが表示されます:
Boolean InsertObject(TableP table, ObjectP object)
{
int i = (*table->hfun)(object->key, table->size);
if (table->linkedObjects[i].key == NULL)
{
table->linkedObjects[i].key = object;
} else
{
table->linkedObjects[i].next->key = object;
}
return TRUE;
}
Eclipse デバッガーを使用すると、呼び出しの時点で変数の値が次のようになっていることがわかります。
object->key
タイプvoid*
値0x804c018
table->size
タイプsize_t
値1
これは、関数へのポインターを呼び出す方法ではないと思います。ここで何が問題なのですか?
編集:
デバッグで私も見ることができます:
*table->hfun
type int(const void *,size_t)
table->hfun
type HashFcn
value0x11