假设我有以下功能:
Table * lookup_set(Table * t, char * key, ValueType value)
{
int hash = lookup_hash(key);
char * key_copy = strdup(key);
Entry * bucket = t->table[hash];
...
然后再
Entry * new = (Entry *) malloc(sizeof(Entry));
new->key = key_copy;
new->value = value;
new->next = NULL;
bucket = new;
return t;
}
t-> table [hash]的值不会更改为new,即使我为bucket分配了新内容,我认为我设置为指向内存块t-> table [hash]指着。我做错了什么?
答案 0 :(得分:2)
你可能想要的更像是:
Table * lookup_set(Table * t, char * key, ValueType value)
{
int hash = lookup_hash(key);
char * key_copy = strdup(key);
Entry ** bucket = *t->table[hash];
:
Entry * new = (Entry *) malloc(sizeof(Entry));
new->key = key_copy;
new->value = value;
new->next = *bucket;
*bucket = new;
return t;
}
bucket
现在是指向指针的指针,允许您更改指针指针的值。如果要将bucket
向下移动到链接列表,则需要使用
bucket = &(*bucket)->next;
答案 1 :(得分:0)
考虑让问题更容易理解:
你有
int bucket = X;
然后在
bucket = y;
然后在
return x;
明白了吗?
所以你需要一条线
t->table[hash] = new;
但要注意内存泄漏。