2011-04-18 35 views
1

由于某些原因,当我将元素插入到我的哈希表中时,同一索引处的所有元素最终具有相同的值。例如,如果我在散列表的索引2处有三个元素,那么所有三个元素将与插入到该索引中的最后一个具有相同的“单词”。我在插入前为每个元素动态分配内存,所以我不知道这个问题。C哈希表问题,一切都有相同的值

任何人都有线索?谢谢。

struct word{ 
    char *word; 
    struct word *next; 
}; 


struct word *hashTable[20]; 

void func(const char *file) 
{ 
    char word[1000]; 
    int i; 

    FILE *infile = stdin; 
    infile = fopen(file, "rb");  
    if(infile == NULL) { 
     printf("cannot open [%s]\n", file); 
     return; 
    } 

    while(fscanf(infile, "%s" word) != EOF) {  

     struct word *w; 

      w = malloc(sizeof(struct word)); 
      w->word = word;   
      w->next = NULL; 
      insert(w); 
    } 

    fclose (infile); 
} 

void insert(struct word *v) 
{  
    if(hashTable[hash(v->word)]) 
    { 
    struct word *end = hashTable[hash(v->word)]; 

    while(end->next != NULL) { 
     end = end->next; 
    } 
    end->next = v; 
    } 
    else 
    hashTable[hash(v->word)] = v; 
} 

回答

3

这是因为设置了word指针每struct word在同一word阵列(定义为在FUNC本地变量中的一个)到另一个点。这个数组会被文件中的每个单词覆盖,所以它们最终都是相同的。您需要为每个要保留的单词数组分配更多空间,并将其复制到那里。如果你改变它是

w->word = strdup(word); 
+0

哦,对了,我觉得自己像一个小丑现在的strdup功能会做很好地为您服务。谢谢。 – 2011-04-18 02:15:58