문제 :FREAD()는 Valgrind의 오류가 발생합니다 : "조건부 점프 또는 이동이 초기화되지 않은 값 (들)에 따라"
노드 Valgrind의에서 저장 text_를 검색 할 때 작품의 데이터를로드하지만, "조건부 점프"를 던집니다. text_는 여전히 올바르게 검색되어 표시됩니다. 문제의 원인은 무엇
:
이것은 코드가 ReadFile을() 함수의 부분이 특정 FREAD (인)이 문제가 발생합니다.
int readFile(char **text, ...)
...
size_text = filesize - previous_position;
*text = (char *)malloc(size_text + 1);
fread(*text, 1, size_text, input);
Valgrind의 메시지 :
==18139== Conditional jump or move depends on uninitialised value(s)
==18139== at 0x48303C7: __GI_strlen (vg_replace_strmem.c:455)
==18139== by 0x48EA17F: vfprintf (vfprintf.c:1637)
==18139== by 0x48EF955: printf (printf.c:33)
==18139== by 0x108F6A: game (version-3.c:243)
==18139== by 0x109085: main (version-3.c:287)
==18139== Uninitialised value was created by a heap allocation
==18139== at 0x482D27C: malloc (vg_replace_malloc.c:299)
==18139== by 0x108BBC: readFile (version-3.c:125)
==18139== by 0x108D4A: BuildTree (version-3.c:197)
==18139== by 0x109074: main (version-3.c:286)
==18139==
솔루션
널 (NULL) 종료 수정이 오류를 추가. 초기 가정은 null 종결자를 잘못 배치했기 때문입니다. * text [size_text] = '\ 0'; -> 오류가 발생했습니다 (* text) [size_text] = '\ 0'; -> 오류를 수정합니다.
fread가 예상 바이트 수를 읽고 있는지 확인하십시오. size_text 바이트가 필요합니다. 그것은 당신이 읽은 금액입니까? 만약 당신이 덜 읽으면이 에러가 발생합니다. – pm100
cos_t size_text를 결정하기 위해 멋진 twiddling을합니다. – pm100
'size_text + 1' 바이트를 할당하지만'fread'로'size_text' 바이트 만 읽습니다. 그래서 그것은 1 바이트를 초기화되지 않은 상태로 남겨 둡니다. – user3386109