Valgrind делает эти жалобыНеужели valgrind жалуется на неинициализированные переменные, которые я инициализировал?
Conditional jump or move depends on uninitialised value(s)
==8443== at 0x40070F: main (test.c:31)
==8443== Uninitialised value was created by a heap allocation
==8443== at 0x4C29BCF: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==8443== by 0x4EA4847: getdelim (in /usr/lib64/libc-2.20.so)
==8443== by 0x40079E: main (test.c:24)
Линия 31 относится к линии ниже if(line[i] == '(' || line[i] == '{' || line[i] == '[')
и линия 24 относится к линии ниже while (getline(&line, &len, fp) != -1) {
.
int main(){
FILE * fp;
char * line = NULL;
size_t len = 0;
fp = fopen("test.json", "r");
if (fp == NULL)
return 0;
while (getline(&line, &len, fp) != -1) {
if(!line)
break;
int i;
// Go through each letter
for(i = 0; i<len; i++){
if(line[i] == '(' || line[i] == '{' || line[i] == '[')
printf("%c",line[i]);
}
if(line)
free(line);
line = NULL;
len = 0;
}
fclose(fp);
if (line)
free(line);
return 1;
}
Я сделал некоторый поиск других вопросов с подобными проблемами, которые заставили меня попытаться освободить линию в конце цикла в то время как и Реинициализация двух переменных, но я получаю эту жалобу и может Подумайте, почему.
Что я делаю неправильно?