[C con Clase] Uso de malloc y free

d1cor cordobadie en gmail.com
Dom Nov 15 21:29:56 CET 2015


On 11/15/2015 04:33 PM, marcelinux wrote:
> /* Uso de malloc y liberación con free */
> /* Versión 2. */
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> char *manejo(char *param);
>
> int main()
> {
> 	char *cadenaA = (char *)malloc(80 * sizeof(char));
> 	char *cadenaB = (char *)malloc(80 * sizeof(char));
> 	cadenaA = manejo("Contenido de A");
> 	printf("\nCadena A: %s", cadenaA);
> 	cadenaB = manejo("Contenido de B");
> 	printf("\nCadena B: %s\n", cadenaB);
> 	free(cadenaA);
> 	free(cadenaB);
> 	cadenaA=NULL;
> 	cadenaB=NULL;
> }
>
> char *manejo(char *param)
> {
> 	return param;
> }
> </code>

Me parece que a la función manejo le estás pasando una constante, que tiene su propia dirección de 
memoria. La función manejo retorna la misma dirección de memoria de la constante, y al asignársela a 
cadenaA y cadenaB estás sobrescribiendo la dirección retornada por malloc, de modo que luego free 
falla al intentar liberar una dirección de memoria que no corresponde con un segmento de memoria 
dinámica.

El código funciona, pero luego de las llamadas a manejo perdés la referencia que apuntaba a los 
segmentos de memoria dinámica.

Espero te sirva!

--
Diego Córdoba / @d1cor




Más información sobre la lista de distribución Cconclase