2012-12-25 207 views
0

我试图调用一个函数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->sizesize_t价值1

我想这是不是调用指向函数的方式。这里有什么问题?

编辑:

在调试我还可以看到: *table->hfunint(const void *,size_t) table->hfunHashFcn0x11

+0

发表编译的例子,显示问题。例如,你不会显示'hfun'成员是如何初始化的 - 问题可能仅仅是它不是。 –

+0

offhand,其中'linkedObjects'曾经分配过?你是'InsertObject'的确,那个数组中有空格,但没有更多的代码,人们只能猜测它是否引用了有效的数据。 – WhozCraig

回答

6

你不调用它的正确途径。

您可以像访问其他函数一样访问函数指针。

table->hfun(object->key, table->size) 

[编辑]右键,请确保您还指定hfun正确:

int myFunc(const void* key, size_t tableSize) { } 

table->hfun = &myFunc; 
+0

再次,我得到'没有来源可用于“0x11”' – Tom

+3

然而,使用'(*表 - > hfun)(对象 - >键,表 - >大小)没有任何错误,所以这不是'这很可能是解决问题的方法。 –

+0

更新了我的答案,并附加了一些关于函数指针的信息。 –