【问题标题】:Adding to a hash table without overwriting添加到哈希表而不覆盖
【发布时间】:2013-11-17 02:41:30
【问题描述】:

这是我遇到的问题:

我可以回显设置的最后一个变量,但不能回显以前的变量。
因此,如果 x=Welcome 并且我回显 $x... 我会得到 Welcome。 但是如果我做 xx=Back... 它会删除原来的 x

【问题讨论】:

    标签: c hashtable


    【解决方案1】:

    您将指针存储在表中,但指针指向一个简单重复使用的局部变量……您正在覆盖表指向的键和值。

    在您的 Node 结构中,复制指针指向的内容,这样您就可以保留一份不会被覆盖的副本。

    由于您正在处理字符串,解决此问题的简单方法是替换(在 Table_add 中):

    p->key = key;
    p->value = value;
    

    p->key = strdup(key);
    p->value = strdup(value);
    

    但如果你这样做,你需要确保在释放节点之前free()这两个值。

    【讨论】:

    • 成功了。谢谢!因此,通过释放这两个值,我是否只在执行 free(p) 之前执行 free(key) 和 free(value)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多