이 함수는 해시 테이블의 일부입니다. 검색 할 해시 목록과 키를 전달하고 있습니다. 나는 그것을 실행하려고하면 불행하게도, Valgrind의 나에게 오류초기화 Valgrind 오류
==1741== Conditional jump or move depends on uninitialised value(s)
==1741== at 0x4018DE: HashSearch (Hash.c:81)
==1741== by 0x400FA7: function (Nine13.c:181)
==1741== by 0x4009D8: main (Nine13.c:54)
==1741==
==1743== Conditional jump or move depends on uninitialised value(s)
==1743== at 0x4018DE: HashSearch (Hash.c:81)
==1743== by 0x400FA7: function (Nine13.c:181)
==1743== by 0x4009D8: main (Nine13.c:54)
==1743==
주고 계속
int HashSearch (Hash_list h, char* key)
{
struct ent *x = (struct ent *)malloc(10*sizeof(struct ent));
for (x = h->table[hash(key, h->size)]; x!=0; x=x->next) {
if (strcmp(x->pos, key)==0) {
return x->num;
}
}
return -1;
}
(라인 81 "에 대한"로 시작하는 코드의 라인입니다).
struct ent
과 전달 된 해시 목록을 모두 초기화 한 것 같습니다. 무엇이 잘못 되었나요?
을 분리하십시오. 그래서'h-> table' 또는'x'가 문제를 일으키는 지 알 수 있습니다. 그런 다음 다시 작업하십시오. – John3136
메모리를'x'에 할당하고'for' 루프에서'x'를 즉시 재 할당하면 메모리가 누수됩니다. –
내 생각 엔 문제가 실제로 'HashSearch'외부에 있다는 것입니다. 'key'는 확실히 null로 끝났습니까? 'h-> table'에있는 모든 엔트리와 그 멤버 ('pos','next','num')는 초기화되어 있습니까? – jerry