<div dir="ltr"><div><div><div><div><div><div><div><div><div>Hola:<br><br></div>El programa aparentemente está bien. No he podido probarlo porque no dispongo de la implementación de la función "longitud", pero he usado la función estándar "strlen", y no se producen errores.<br></div>Esto me lleva a pensar que, con toda probabilidad, el error está en la función "longitud", que debe calcular mal la longitud de la cadena. Este error hace que el valor calculado de "salida" justo antes del "free" no esa exactamente el original, y el "segmentation fault" se produce al intentar liberar memoria en una dirección incorrecta.<br><br></div>Además de esto, me gustaría comentar algunas cosas.<br><br></div>1) Con respecto a la función memcpy, decir que esta función está optimizada para copiar bloques de memoria. Hasta tal punto puede ser así que, probablemente, sólo se usa una instrucción de código máquina para ese copiado, de modo que usarla en un bucle para copiar datos de direcciones consecutivas es bastante ineficaz.<br></div>En lugar de esto:<br><p class="MsoNormal">      for (int i = 0; i < posicion; i++)</p><p class="MsoNormal">      {</p><p class="MsoNormal">          memcpy(salida,mensaje,1);</p><p class="MsoNormal">          salida++;</p><p class="MsoNormal">          mensaje++;</p>      }<br></div>Es mucho mejor usar esto:<br><br></div>memcpy(salida,mensaje,posicion);<br></div>salida+=posicion;<br></div>mensaje+=posicion;<br><div><div><div><div><div><div><div><div><div><div><div class="gmail_extra"><br></div><div class="gmail_extra">2) De hecho, para copiar cadenas es mejor usar strcpy, o en tu caso, strncpy. Esta segunda permite indicar el número máximo de caracteres a copiar.<br><br></div><div class="gmail_extra">3) Para evitar cuentas al final, a la hora de liberar memoria, tal vez sería más interesante guardar una copia del puntero "salida". Esto nos asegura que no perdemos su valor, aunque alguna de las cuentas esté mal o haya algún error no previsto.<br><br></div><div class="gmail_extra">Hasta pronto.<br clear="all">-- <br><div dir="ltr">Salvador Pozo Coronado<br><a href="http://www.conclase.net" target="_blank">http://www.conclase.net</a><br>Blog con Clase: <a href="http://blogconclase.wordpress.com" target="_blank">http://blogconclase.wordpress.com</a><br>mailto:<a href="mailto:salvapozo@gmail.com" target="_blank">salvapozo@gmail.com</a></div>
</div></div></div></div></div></div></div></div></div></div></div></div>