2011-05-06 37 views
0

这部分可能应该总是返回相同的哈希值给每个密钥是不是? 但我发现它们相关的值会更改为每次更新的密钥...一个值应该是相同的但它会改变

如何在每次更新时修复每个密钥的相同值?

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) 

回答

1

我不认为你需要使用参考sz插入,假设这是一个函数调用。你应该改为malloc,这样在函数调用返回后值不会丢失(然后你指向一个随机的内存位置,它曾经是你函数的堆栈)。只要确保你包含代码来释放这些内存。

+0

@B米奇:请看看我的以下回答 – Ali 2011-05-30 11:55:21

+0

@B米奇 是的“你指向一个随机存储位置”是正确的答案!谢谢 !!!现在我有另一个问题:我想更新每个@IP的音量。因此,例如在每个5秒后,我添加每个@IP(i)的V(i)。好吧现在它工作正常,但我的问题是,经过一段时间后,我发现有时相同的IP地址重复两次或甚至很多次,以便在输出中我发现相同的@IP重复了太多次。这就像是哈希表或类似的问题。下面是代码: – Ali 2011-05-30 11:56:19

+0

'INT update_hashTable(...)' ''{' ...' 'u_int32_t *一个; A =(u_int32_t *)malloc的(的sizeof(u_int32_t));' '一个再用ntohl =(原样> addr32 [0]);' 'SZ =更新(大小);' '如果(返回值=(u_int32_t)g_hash_table_lookup(哈希表,一)){' '返回值+ = SZ;' 'g_hash_table_insert(哈希表,(gpointer)一,gpointer)返回值); ' '} \ N' '其他g_hash_table_insert(哈希表,(gpointer)A,(gpointer)SZ)}'' – Ali 2011-05-30 11:56:41

相关问题