2

宿題をしているのですが、LINUXハッシュ関数について質問があります。*mnemonic_nameのような文字列を入力すると'ADD'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'のような文字列を'*mnemonic_name'変数に入れると、出力' 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  }
4

1 に答える 1

1

わかった。したがって、これを「未回答」セクションから削除するために、フランシスによって既に与えられた回答を再度追加します。

int op_index; // <-- not initialized.

また、コンパイラ フラグで -Wall を必ず使用してください。

(さらに、フランシスのコメントに +1 を追加しました。)

于 2012-06-19T10:09:00.147 に答える