2011-05-06 40 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

相關問題