调整C中节点的静态数组的大小

时间:2018-11-17 11:56:49

标签: c arrays hash structure

我正在处理一个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;
}

我尝试释放数组会导致断点触发,并且该函数似乎没有执行我尝试的操作。问题可能是我的数组的静态分配吗?如果是这样,我该怎么办而不必大幅度更改代码?

0 个答案:

没有答案