2012-04-29 8 views
2

私は宿題をLINUXとしています。ハッシュ関数についていくつか質問があります。 のような文字列に*mnemonic_nameを入力すると、コンパイルするたびにfind_indexがランダムになります。あなたはこの問題を説明し、私のためにそれを解決しますか?私は '* mnemonic_name' 変数に 'ADD' のような文字列に入れハッシュ関数を使用する

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 } 

、出力 '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 } 
+7

変数を初期化する必要があります。 op_indexは初期化されていないため、ランダム値を取得することがあります。 – Francis

+0

うわー!!フランシス!ありがとう!!これは本当にこの臆病な問題を見つけるのは難しいです..もう一度ありがとう!! – Sogo

+5

これだけのコンパイラがこの状況について警告しますので、常に '-Wall'を使用してください。 – hroptatyr

答えて

1

OK。

int op_index; // <-- not initialized. 

そして、コンパイラフラグで-Wallを使用してください:だから私はすでにフランシスによって与えられた答えを再追加してい「未回答」セクションからこれを除去するために。

(さらに+1をFrancisのコメントに追加)

関連する問題