我正在试图弄清楚如何初始化一个指向链接列表的指针数组,这些链接列表具有基于用户输入的动态大小。
我有一个结构如下:
struct HashTable {
int tableSize;
int (*getKey)(void *);
char * (*toString)(void *);
void (*freeHashObject)(void *);
Boolean (*compare)(void *, void *);
ListPtr table;
};
表变量应该包含动态数量的链表,具体取决于用户输入。您可以假设n是一个有效的整数,并且createHashObject按预期工作。
HashTablePtr table;
HashObjectPtr job;
table = createHashTable(n, getKey, toString, freeHashObject, compare);
for (i=0; i<n; i++)
{
job = createHashObject(firstInput);
HashInsert(table, job);
}
我认为问题在于createHashTable,如下所示。
HashTablePtr createHashTable(int size, int (*getKey)(void *),
char * (*toString)(void *), void (*freeHashObject)(void *),
Boolean (*compare)(void *, void *))
{
HashTablePtr h = (HashTablePtr)malloc(sizeof(HashTable));
//dont worry that i dont do things with the function pointers
h -> table = (ListPtr)malloc(sizeof(List)*size);
int i;
for (i = 0; i < size; i++)
{
h -> table[i] = createList(getKey, toString, freeHashObject);
}
}
上面的代码似乎没有正确初始化所有链接列表。这是createList函数和List结构的代码。
ListPtr createList(int(*getKey)(void *),
char * (*toString)(void *),
void (*freeHashObject)(void *))
{
ListPtr list;
list = (ListPtr) malloc(sizeof(List));
list->size = 0;
list->head = NULL;
list->tail = NULL;
list->getKey = getKey;
list->toString = toString;
list->freeObject = freeHashObject;
return list;
}
struct list {
int size;
NodePtr head;
NodePtr tail;
int (*getKey)(void *);
char * (*toString)(void *);
void (*freeObject)(void *);
};
我愿意下注,问题在于如何定义动态大小的链接列表指针数组,然后初始化它。有谁能为我提供一些帮助吗?
谢谢。
答案 0 :(得分:0)
在HashTable
结构中更改table
定义以将其声明为指针,如下所示
struct HashTable {
...
ListPtr *table;
};
然后你可以分配你想要的正确数量。