В C строки заканчиваются нулевым байтом, представленным \0
внутри строки. Атрибут size
возвращает размер, не учитывающий нулевой байт, поэтому вы должны выделить size+1
байтов, чтобы завершающий нулевой байт не переполнялся. Подробнее о строках с нулевым символом в конце здесь .