【问题标题】:A Value That Should Be The Same But It Changes一个应该相同但它会改变的值
【发布时间】:2011-05-06 15:28:46
【问题描述】:

这部分可能应该总是为每个 Key 返回相同的哈希值,不是吗? 但我发现与键相关的值会随着每次更新而改变......

每当有更新时,如何修复每个键的相同值?

u_int64_t* ReturnValue=NULL;
u_int32_t a;
int sz;

a = nothl(as->addr32[0]);
sz = update(size);

if (ReturnValue=(u_int64_t*)g_hash_table_lookup(hashtable, (gpointer)&a))
{
g_hash_table_insert(hashtable, (gpointer)&a, (gpointer)ReturnValue);
// I didnt't use g_hash_table_replace() because it will free the key then the value change
}

else g_hash_table_insert(hashtable, (gpointer)&a, (gpointer)&sz)

【问题讨论】:

    标签: c glib


    【解决方案1】:

    假设这是一个函数调用,我认为您不想使用对sz 的引用进行插入。您应该 malloc this 代替,以便在函数调用返回后该值不会丢失(然后您指向一个曾经是函数堆栈的随机内存位置)。只需确保您也包含释放此内存的代码即可。

    【讨论】:

    • @B Mitch:请看我下面的回答
    • @B Mitch 是的“你指向一个随机内存位置”是正确的答案!谢谢 !!!现在我有另一个问题:我想将 Volume 更新到每个 @IP。因此,例如每 5 秒后,我添加每个 @IP(i) 的 V(i)。好的,现在它工作正常,但我的问题是,在一段时间后,我发现有时相同的 IP 地址会重复两次甚至很多次,因此在输出中我发现相同的@IP 重复了太多次。就像哈希表或类似的东西有问题。这是代码:
    • int update_hashTable( ... ) {...u_int32_t *a; a = (u_int32_t*)malloc(sizeof(u_int32_t));a = ntohl(as->addr32[0]);sz = update(size);if (ReturnValue=(u_int32_t)g_hash_table_lookup(hashtable, a)) {if (ReturnValue=(u_int32_t)g_hash_table_lookup(hashtable, a)) {ReturnValue +=sz;@987654331>@9876543332@s@pan
    • int update_hashTable( ... ) { ... u_int32_t *a; a = (u_int32_t*)malloc(sizeof(u_int32_t)); a = ntohl(as->addr32[0]); sz = update(size); if (ReturnValue=(u_int32_t)g_hash_table_lookup(hashtable, a)) { ReturnValue +=sz; g_hash_table_insert(hashtable, (gpointer)a, gpointer)ReturnValue); } else g_hash_table_insert(hashtable, (gpointer)a, (gpointer)sz) }
    • 您正在覆盖 ntohl 中指向 a 的 malloc 指针。那应该是*a = ntohl(...)。不确定重复值。如果他们继续,我会提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多