Когда я запускаю следующий код с
valgrind ./test
, я получаю следующую ошибку:
==8389== Conditional jump or move depends on uninitialised value(s)
==8389== at 0x4E88CC0: vfprintf (vfprintf.c:1632)
==8389== by 0x4E8F898: printf (printf.c:33)
==8389== by 0x40072F: main (test.c:30)
Я добавил комментарий к строке, на которую он жалуется ниже:
int main (int argc, char **argv) {
char str[] = "a string";
int str_len = strlen(str);
char *str2 = malloc(sizeof(char) * (str_len+1)); //source of uninitialised value
strncpy(str2, str, str_len);
printf("%s",str2); //source of error
free(str2);
exit (0);
}
str2 присваивается значение через strncpy, так почему же оно не будет инициализировано к тому времени, когда оно получит printf?