我试图调用一个函数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
发表编译的例子,显示问题。例如,你不会显示'hfun'成员是如何初始化的 - 问题可能仅仅是它不是。 –
offhand,其中'linkedObjects'曾经分配过?你是'InsertObject'的确,那个数组中有空格,但没有更多的代码,人们只能猜测它是否引用了有效的数据。 – WhozCraig