Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: HRSLASH en 18 Abril 2012, 22:22 pm



Título: Problema para liberar memoria - C
Publicado por: HRSLASH en 18 Abril 2012, 22:22 pm
Hola foreros!! Subo aqui un problema que tengo en un programa que estoy haciendo (no se si puede hacerse lo que quiero, hasta el momento no pude). El tema es el sig. desde una funcion llamo a otra que dentro declara un array estatico de punteros y muestre el dato relacionado con la posicion que le estoy pasando, el por que de declararlo estatico es para que no lo tenga que crear cada vez q vuelvo a entrar ya que la necesito en un bucle. Ahora quiero borrar el array estatico de la memoria ya q una vez salido del bucle no lo necesito mas, por eso devuelvo la direccion del array, pero cuando uso free() con la direccion de memoria devuelta en la funcion llamadora me tira error de memoria y aborta el programa. Repito, no se si se puede hacer lo que pretendo, por eso queria consultarlo con uds. Dejo aqui un ejemplo de lo que estoy tratando de lograr (No es el programa que estoy haciendo). Espero rtas y Gracias!! :)

Código
  1.  
  2. void funcion1()
  3. {
  4.     int i;
  5.     void *ptr = NULL;
  6.  
  7.     for (i = 0; i < 5; i++){
  8.         if (ptr == NULL)
  9.                 ptr = funcion2(i);
  10.         else
  11.                 funcion2(i);
  12.     }
  13.  
  14.     free(ptr);
  15. }
  16.  
  17. void *funcion2(int par)
  18. {
  19.     static char *str[] = {
  20.     "UNO",
  21.     "DOS",
  22.     "TRES",
  23.     "CUATRO",
  24.     "CINCO"
  25.     };
  26.  
  27.     printf("%s\n", str[par]);
  28.  
  29.     return &str;
  30. }
  31.  
  32.  


Título: Re: Problema para liberar memoria - C
Publicado por: Eternal Idol en 18 Abril 2012, 22:26 pm
Nunca se libera algo que no se reserva (sin malloc no hay free).


Título: Re: Problema para liberar memoria - C
Publicado por: david_BS en 19 Abril 2012, 03:45 am
cherto,
aunque al menos está bien que haya puesto el array con static para que conserve la dirección (no sea redeclarado en cada call) y no ser destruído (liberado) automáticamente por estar en el stack frame de la función2


Título: Re: Problema para liberar memoria - C
Publicado por: HRSLASH en 19 Abril 2012, 13:59 pm
aahhh ok, pero si se reserva la memoria con malloc se puede liberar en otra funcion devolviendo la direccion??


Título: Re: Problema para liberar memoria - C
Publicado por: Eternal Idol en 19 Abril 2012, 14:08 pm
Si.


Título: Re: Problema para liberar memoria - C
Publicado por: HRSLASH en 19 Abril 2012, 14:24 pm
Gracias x las rtas!! :D


Título: Re: Problema para liberar memoria - C
Publicado por: Eternal Idol en 19 Abril 2012, 14:26 pm
De nadas  ::)