Я работаю над 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;
}
Мои попытки освободить массивы приводят к срабатыванию точки останова, и, похоже, функция не выполняет то, что я пытаюсь. Может ли быть проблема в статическом размещении моего массива? И если да, то что я могу с этим поделать без необходимости кардинально менять свой код?