Ich werde 's Hash - Tabelle Implementierung in einem C - Programm und nur für jetzt Ich experimentiere nur damit. Ich habe das folgende Stück Code zum Testen:GLib Hash Tabelle Schleife Problem
#include <glib.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
int main(){
// Some codes and declerations here
GHashTable *g_hash_table;
uint32_t *a;
a=(uint32_t *)malloc(sizeof(uint32_t));
if(a==NULL){
printf("Not Enough Mem For a\n");
return 1;
}
*a=1123231;
uint32_t* key;
key=(uint32_t *)malloc(sizeof(uint32_t));
if(key==NULL){
printf("Not Enough Mem For key\n");
return 1;
}
*key=122312312;
int i;
g_hash_table=g_hash_table_new(g_int_hash, g_int_equal);
for(i=0;i<TABLE_SIZE;i++){
*key+=1;
*a+=1;
g_hash_table_insert(g_hash_table,(gpointer)key,(gpointer)a);
uint32_t *x=(uint32_t *)g_hash_table_lookup(g_hash_table,key);
printf("Counter:%d, %u\n",i,*x);
}
GHashTableIter iter;
g_hash_table_iter_init(&iter,g_hash_table);
int size=g_hash_table_size(g_hash_table);
printf("First size: %d\n",size);
uint32_t *val;
uint32_t *key_;
int counter=0;
// My problem is in the following loop it
// always returns the same and the last key value pair
while(g_hash_table_iter_next(&iter,(gpointer*)(void*)&key_,(gpointer*)(void*)&val)){
counter++;
printf("%u %u\n",(uint32_t)*key_,(uint32_t)*val);
printf("Counter: %d\n",counter);
}
//Some more code here
return 0;
}
Irgendwie Iterierten richtig meines Testcode, sondern in der Schleife gibt es immer noch die letzten Schlüssel und letzten Wert-Paare, und es ist immer das gleiche. Was ist das Problem hier? Der obige Code wird möglicherweise nicht mit seinem Format ausgeführt. Ich habe einige Teile kopiert und eingefügt, um eine klare Vorstellung davon zu geben, was ich zu tun versuche.
Danke, Sie waren schnell: D. – systemsfault
Die Grammatik für sizeof (C99 6.5.3) ist 'sizeof unary-expression | sizeof (type-name) ', und die einzige Verwendung in dem Beispiel ist mit einem Typnamen, so dass die Parens hier erforderlich sind. –
Ich habe Glib für eine lange Zeit verwendet, es hilft bei der Suche nach solchen Sachen. :) – unwind