Hola,
imagino que
nl es el tamaño de
palabra, por lo que puedes evitar pasarlo por referencia.
No tiene ningún sentido usar la función malloc (también podrías usar calloc) dentro del bucle, ya que en cada iteración estarías solicitando un nuevo espacio de memoria y dejando "perdida" la que solicitaste en la iteración anterior (es decir, que estás provocando "lacks" o "fugas" de memoria. Algo nada deseable). Tan importante es controlar la solicitud de memoria como la posterior liberación de la misma.
Un saludo,
gonzo
p.d.: recuerda que el tamaño de
palabra2 es el doble que el de
palabra