Ответ 1
Как это прочитать:
Неверное чтение размера 1
Ваша программа пытается прочитать один байт откуда-то, что Valgrind не нравится.
на 0x401569: main (: 395)
Где в коде это происходит (явно strcmp был встроен)
Адрес 0x0 не находится в стеке malloc'd или (недавно) free'd
Какой адрес он читал - 0x0 - "NULL". Остальная часть утверждения просто говорит, почему он недействителен (это не из стека, это не то, что вы получили от malloc, и не было освобождено в последнее время). "Недавно" упоминается, потому что valgrind отслеживает освобожденную память для ограниченного количества frees, поэтому он не может точно сказать, что он не освободил миллион лишних денег - в этом случае это не так, но если вы см. такое сообщение, МОЖЕТ быть, что оно стало недействительным, потому что оно было освобождено веками назад. Адрес не будет равен нулю (или около нуля).