我正在尝试使用指向结构内部函数的指针来调用函数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
类型int(const void *,size_t)
table->hfun
输入HashFcn
值0x11
答案 0 :(得分:6)
你没有以正确的方式称呼它。
您可以像访问任何其他功能一样访问函数指针。
table->hfun(object->key, table->size)
[编辑]右键,确保您还正确分配了hfun
:
int myFunc(const void* key, size_t tableSize) { }
table->hfun = &myFunc;