我有一个哈希表的重新哈希函数,如下所示:

int hash_rehash(hash_table *ht) {
    list *l = hash_list(ht); // creates a linked list of hash table members
    hash_table *nht = hash_createTable(ht->buckets * 2, ht->maxLoad, ht->hash); // new hash table with 2x the buckets
    unsigned int i = 0;
    list_node *c = l->head;
    hash_destroyTable(ht); // destroy the old hash table
    for (; i < l->size; i++, c = c->next) {
        hash_insert(nht, c->data); // loop through linked list to re-insert old hash table members
    }
    *ht = *nht; // reference of old hash table = reference of new hash table?
    list_destroyList(l);
    return 0;
}


但是,如果我销毁旧的哈希表,则在读取新表的所有成员时会遇到SIGABRT错误,因为nht使用的是我为ht分配的相同内存。更改旧哈希表ht以引用新哈希表nht的正确方法是什么?

最佳答案

接受hash_table **而不是hash_table *。然后,如果您的呼叫者有一个hash_table *ht,他们将呼叫hash_rehash(&ht),从而允许该函数修改ht

关于c - 设置指针引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27664441/

10-11 17:07