我試圖調用一個函數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