Non è così ed aggiungere un + 1 non risolve di certo la soluzione, perché non è quello il problema...

Da definizione:
char * strncpy ( char * destination, const char * source, size_t num );

Copy characters from string Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.
Significa che se parte la copia dal sesto carattere e dopo gli dici anche di copiare altri 11 caratteri ma la stringa ha un buffer di 11... va fuori memoria.
Richiamando la free() viene liberata memoria e durante questa operazione verifica anche eventuali overflow.

Se vogliamo essere pignoli, il + 1 può servire per un eventuale terminatore di stringa di cui non tieni conto.