2012-04-29 2 views
2

LINUX으로 숙제를하고 있는데 해시 함수에 대한 질문이 있습니다. 'ADD'과 같은 일부 문자열에 *mnemonic_name을 입력하면 컴파일 할 때마다 find_index이 무작위입니다. 이 문제를 설명하고 해결해 주시겠습니까? 나는 '* mnemonic_name'변수에 '추가'와 같은 문자열에 넣어해시 함수 사용

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

확인.

int op_index; // <-- not initialized. 

그리고 컴파일러 플래그에 -Wall을 사용해야합니다 : 그래서 그냥 내가 이미 프랜시스에 의해 주어진 답을 다시 추가하고있는 '답'섹션에서 이것을 제거를 위해서.

(덧붙여 +1에 Francis comment.)