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 }
변수를 초기화해야합니다. op_index가 초기화되지 않았기 때문에 임의 값을 얻을 수 있습니다. – Francis
와우 !! 프란시스! 감사!! 이 소심한 문제를 찾기가 정말 힘들어 .. 다시 한번 감사드립니다 !! – Sogo
모든 컴파일러 만이이 상황에 대해 경고하므로 항상'-Wall'을 사용하십시오 – hroptatyr