Изменение размера статического массива узлов в C - PullRequest
0 голосов
/ 17 ноября 2018

Я работаю над 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;
}

Мои попытки освободить массивы приводят к срабатыванию точки останова, и, похоже, функция не выполняет то, что я пытаюсь. Может ли быть проблема в статическом размещении моего массива? И если да, то что я могу с этим поделать без необходимости кардинально менять свой код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...