我正在处理一个HashTable,该哈希表将冲突链接到一系列链接列表中。我偶然发现了一个试图调整桌子大小的问题。
程序使用以下两种结构:
struct node {
struct node *next;
int data;
};
struct myTable {
struct node *table[10];
struct node *tmpTable[10];
};
struct myTable *tb;
下面看到的函数接收一个整数数组作为参数,创建一个默认大小(为10)的表,然后调用一个插入函数。
void createHT(int *arr, int arrLen) {
tb = (struct myTable*)malloc(sizeof(struct myTable));
for (int i = 0; i < size; i++) {
tb->table[i] = NULL;
}
for (int i = 0; i < arrLen; i++) {
insertHT(arr[i], tb);
}
}
好的,现在解决实际问题。在下一个函数中,我尝试将数组的所有元素复制到临时元素,然后尝试动态地重新分配原始数组以匹配新的给定大小,然后重新哈希并将数据从临时数组插入到新的重新分配的数组中
void resizeHT(int newSize) {
//free(*tb->tmpTable);
*tb->tmpTable = (struct node*)calloc(size, sizeof(struct node));
for (int i = 0; i < size; i++) tb->tmpTable[i] = tb->table[i];
//free(*tb->table);
*tb->table = (struct node*)realloc(*tb->table, newSize);
for (int i = 0; i < size; i++) {
if (tb->tmpTable[i] != NULL) {
struct node *tmp = tb->tmpTable[i];
while (tmp != NULL) {
insertHT(tmp->data, tb);
tmp = tmp->next;
}
}
}
//free(tb->tmpTable);
size = newSize;
}
我尝试释放数组会导致断点触发,并且该函数似乎没有执行我尝试的操作。问题可能是我的数组的静态分配吗?如果是这样,我该怎么办而不必大幅度更改代码?