我在最后三行指出了这个函数中的一个错误,这个错误意味着将ht
指向newHash
,然后在旧{{1}上调用deleteMap
hashMap
曾经指向的结构。
ht
我知道这一定是错的,因为在我这样做之后,void _setTableSize(struct hashMap * ht, int newTableSize)
{
struct hashMap *newHash;
newHash = createMap(newTableSize);
struct hashLink * temp;
int i;
for(i = 0; i < ht->tableSize; i++){
temp = ht->table[i];
while (temp != 0){
insertMap(newHash, temp->key, temp->value);
temp = temp->next;
}
}
struct hashMap *temp2 = ht;
ht = newHash;
deleteMap(temp2);
}
似乎指向垃圾,但我无法弄清楚如何正确地做到这一点。
答案 0 :(得分:1)
您正在为ht
分配一个值,但是因为它是函数的参数(并且所有参数都是值传递),所以当函数返回时不反映此值。
如果要修改ht
以便调用者看到更改,您需要传递指针的地址并将函数更改为接受struct hashMap **ht
,或让函数返回struct hashMap *
。