使用散列函数

我正在用LINUX做我的功课,我有一些关于散列函数的问题。 当我把*mnemonic_nameinput到像'ADD'这样'ADD'string时, find_index在每次编译时都是随机的。 你能解释这个问题并为我解决吗?

这是我的代码:

 251 int symtab_finder(char *mnemonic_name) 252 { 253 node *temp; 254 255 int find_index = op_find(mnemonic_name); 256 int find_flag = 0; 257 258 temp = optabl[find_index].head; 259 260 while(temp) 261 { 262 if((strcmp(temp->mnemonic_name,mnemonic_name)==0)) 263 { 264 find_flag = 1; 265 } 266 temp = temp->next; 267 268 } 269 if(find_flag == 0) 270 { 271 272 } 273 printf("name %s, flag %d, find index %d\n",mnemonic_name,find_flag, find_index); 274 return find_flag; 275 } 

当我把'ADD'这样的string放入'* mnemonic_name'variables时,输出'find_index'是随机的! 我不知道为什么会发生这种情况。

下面是我的op_find代码。

  44 int op_find(char *mnemonic_name) 45 { 46 int op_index; 47 int i; 48 for(i=0; i< strlen(mnemonic_name); i++) 49 { 50 op_index += mnemonic_name[i]; 51 } 52 53 // printf("op_index is %d\n",op_index % 20); 54 return op_index = op_index % 20; 55 } 56 57 int mn_find(char *opcode_number) 58 { 59 int opcode_value; 60 opcode_value = hex_to_dec(opcode_number); 61 // printf("mne value is %d\n",((opcode_value/4)%20)); 62 return ((opcode_value/4)%20); 63 } 

好。 所以为了从“未回答”部分中删除这个问题,我重新添加了弗朗西斯已经给出的答案:

 int op_index; // <-- not initialized. 

并确保在编译器标志中使用-Wall。

(另外还给弗朗西斯评论+1。)