<div dir="ltr">El problema que veo es que no copias el contenido de "param" sino que igualas el puntero de cadenaX sin pedir memoria para esta.</div><div class="gmail_extra"><br><div class="gmail_quote">El 15 de noviembre de 2015, 20:33, marcelinux <span dir="ltr"><<a href="mailto:marcelinator@gmail.com" target="_blank">marcelinator@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola. Tengo una duda con el uso de free.<br>
Tengo dos aplicaciones que hacen lo mismo excepto por la forma de almacenar el contenido en un array.<br>
Si uso strcpy, free me libera sin problemas.<br>
Sin embargo, si uso una función "propia", me produce una "Violación de segmento".<br>
¿Qué me falta?<br>
<br>
Estas son las dos versiones del programa. La versión 2 es la del error.<br>
<br>
<code>/* Uso de malloc y liberación con free */<br>
/* Versión 1. */<br>
#include <stdio.h><br>
#include <stdlib.h><br>
#include <string.h><br>
<br>
int main()<br>
{<br>
        char *cadenaA = (char *)malloc(80 * sizeof(char));<br>
        char *cadenaB = (char *)malloc(80 * sizeof(char));<br>
        strcpy(cadenaA, "Contenido de A");<br>
        strcpy(cadenaB, "Contenido de B");<br>
        printf("\nCadena A: %s", cadenaA);<br>
        printf("\nCadena B: %s\n", cadenaB);<br>
        free(cadenaA);<br>
        free(cadenaB);<br>
        cadenaA=NULL;<br>
        cadenaB=NULL;<br>
}<br>
<br>
/* Uso de malloc y liberación con free */<br>
/* Versión 2. */<br>
#include <stdio.h><br>
#include <stdlib.h><br>
#include <string.h><br>
<br>
char *manejo(char *param);<br>
<br>
int main()<br>
{<br>
        char *cadenaA = (char *)malloc(80 * sizeof(char));<br>
        char *cadenaB = (char *)malloc(80 * sizeof(char));<br>
        cadenaA = manejo("Contenido de A");<br>
        printf("\nCadena A: %s", cadenaA);<br>
        cadenaB = manejo("Contenido de B");<br>
        printf("\nCadena B: %s\n", cadenaB);<br>
        free(cadenaA);<br>
        free(cadenaB);<br>
        cadenaA=NULL;<br>
        cadenaB=NULL;<br>
}<br>
<br>
char *manejo(char *param)<br>
{<br>
        return param;<br>
}<br>
</code><br>
<br>
Sólo necesito aprender un poquito más. Gracias por tu ayuda.<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" rel="noreferrer" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" rel="noreferrer" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Att.<div>David de Alvarado Lacruz</div></div>
</div>