Problema para liberar memoria - C

Iniciado por HRSLASH, 18 Abril 2012, 22:22 PM

0 Miembros y 1 Visitante están viendo este tema.

HRSLASH

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!! :)



void funcion1()
{
     int i;
     void *ptr = NULL;

     for (i = 0; i < 5; i++){
         if (ptr == NULL)
                 ptr = funcion2(i);
         else
                 funcion2(i);
     }

     free(ptr);
}

void *funcion2(int par)
{
     static char *str[] = {
     "UNO",
     "DOS",
     "TRES",
     "CUATRO",
     "CINCO"
     };

     printf("%s\n", str[par]);

     return &str;
}

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

Eternal Idol

Nunca se libera algo que no se reserva (sin malloc no hay free).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

david_BS

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

HRSLASH

aahhh ok, pero si se reserva la memoria con malloc se puede liberar en otra funcion devolviendo la direccion??
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

HRSLASH

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón