Ciao,
non vorrei dire cavolate ma la funzione sizeof ti restituisce la dimensione in byte della strnga... incluso un byte per il carattere terminatore ('\0') di ogni stringa...
quindi se usi sizeof per ogni stringa in length per determinare quanta memoria allocare otteni una valore maggiore del necessario, forse sarebbe meglio usare strlen() per length e allocare length +1 con malloc