使用glib的哈希表的行为
|
我想将音量更新为每个@IP。因此,例如,每隔5秒我就将每个@IP(i)的V(i)相加。好的,现在哈希表工作正常,每T秒保持更新一次。但是问题是,经过一段时间后,我发现有时在哈希表中重复相同的ip地址两次甚至很多次。这样,当我关闭进程时,我发现相同的@IP重复了太多次。就像哈希表有问题一样。
这是此函数\“ update_hashTable()\”如此重要的代码,每隔X秒就会调用一次,我怀疑实际上是内存泄漏……因为我总是为IP @调用
malloc
。
但它继续工作...任何想法?
int update_hashTable( ... ) {
u_int32_t *a;
... //declarations
struct pf_addr *as;
as = ks->addr[0];
a = (u_int32_t*)malloc(sizeof(u_int32_t));
*a = ntohl(as->addr32[0]);
sz = value; // no matter it is... an int for example
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);
}
没有找到相关结果
已邀请:
1 个回复
癸痊醒
重要的是,一旦有了指向与某个键关联的值的指针,就可以直接对其进行直接修改。 如果此代码将由多个线程并行执行,则整个块应由互斥锁保护,也许使用GMutex:http://developer.gnome.org/glib/2.28/glib-Threads.html gcc提供了原子内置的内在函数,例如原子地递增值,请参见http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html