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

+0

@B 미치 예 "네가 임의의 메모리 위치를 가리키고 있습니다"라고 대답했습니다 !! 감사 !!! 이제 또 다른 질문이 있습니다. 볼륨을 각 @IP로 업데이트하고 싶습니다. 예를 들어 각 5 초 후에 각 @IP (i)의 V (i)를 더합니다. 좋아 이제는 잘 작동하지만 내 문제는 특정 기간이 지나면 동일한 IP 주소가 두 번 또는 심지어 여러 번 반복되어 출력에서 ​​동일한 IP가 너무 많이 반복된다는 것을 알게됩니다. 그것은 해시 테이블이나 그와 비슷한 것에 문제가있는 것과 같습니다. 여기서 코드 : – Ali

+0

INT update_hashTable '(...)' ''{... ''' u_int32_t * A는; A = (u_int32_t *)의 malloc (sizeof 연산자 (u_int32_t)) ' 'A = ntohl (시스 -> addr32 [0]);'' SZ = 업데이트 (크기),'' 경우 (에 ReturnValue = (u_int32_t) g_hash_table_lookup (해시 테이블, a)) { ' '에 ReturnValue = + SZ,'' g_hash_table_insert (해시 테이블 (gpointer)는, gpointer)에 ReturnValue); '' } \ n' '다른 g_hash_table_insert (해시 테이블 (gpointer)는 (gpointer) SZ)}'' – Ali

관련 문제