Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error liberando memoria en C

Estas en el tema de error liberando memoria en C en el foro de C/C++ en Foros del Web. Hola gente, estoy teniendo problemas para liberar punteros en C, por lo visto no estoy entendiendo bien como funciona la funcion "free", les agradeceria si ...
  #1 (permalink)  
Antiguo 31/01/2009, 18:38
Avatar de andycpu  
Fecha de Ingreso: marzo-2004
Ubicación: Misiones - Argentina
Mensajes: 13
Antigüedad: 20 años, 1 mes
Puntos: 0
error liberando memoria en C

Hola gente, estoy teniendo problemas para liberar punteros en C, por lo visto no estoy entendiendo bien como funciona la funcion "free", les agradeceria si me puedan explicar cual es mi error..
Muchisimas gracias de antemano..
Este es el codigo:

Código:
#include<stdio.h> 
#include<stdlib.h> 

int *reserv_mem(void); 

int main() 
{ 
   int var = 9; 
   int *ptr = reserv_mem(); 
   ptr = &var; 
   free(ptr); //ACA ME TIRA ERROR 
   return 0; 
} 

int *reserv_mem(void) 
{ 
   int *temp = NULL; 
   temp = (int *) malloc(sizeof(int)); 
   return temp; 
}
Nota: estoy utilizando gcc en linux..
  #2 (permalink)  
Antiguo 01/02/2009, 06:17
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: error liberando memoria en C

Ahi estas liberando var y no la memoria reservada dinamicamente.

int *ptr = reserv_mem(); //ptr apunta a memoria reservada dinamicamente con malloc
ptr = &var; //ptr apunta a var, con lo cual la memoria reservada antes no tiene ninguna variable que la contenga y nunca sera liberada, ahi tenes un memory leak
free(ptr); //ahora liberas ptr, una variable local que esta en la pila, error
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 02/02/2009, 12:46
Avatar de andycpu  
Fecha de Ingreso: marzo-2004
Ubicación: Misiones - Argentina
Mensajes: 13
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: error liberando memoria en C

Hola, muchísimas gracias, me sirvió muchísimo tu respuesta, y confirme lo que dije antes...era un error conceptual mio..

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:05.