elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema para liberar memoria - C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema para liberar memoria - C  (Leído 3,807 veces)
HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Problema para liberar memoria - C
« 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.  


En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema para liberar memoria - C
« Respuesta #1 en: 18 Abril 2012, 22:26 pm »

Nunca se libera algo que no se reserva (sin malloc no hay free).


En línea

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

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Problema para liberar memoria - C
« Respuesta #2 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
En línea

HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema para liberar memoria - C
« Respuesta #3 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??
En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema para liberar memoria - C
« Respuesta #4 en: 19 Abril 2012, 14:08 pm »

Si.
En línea

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

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema para liberar memoria - C
« Respuesta #5 en: 19 Abril 2012, 14:24 pm »

Gracias x las rtas!! :D
En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema para liberar memoria - C
« Respuesta #6 en: 19 Abril 2012, 14:26 pm »

De nadas  ::)
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayudita por ak. Encontrar y liberar memoria. « 1 2 »
Programación Visual Basic
70N1 13 4,168 Último mensaje 20 Junio 2008, 01:49 am
por 70N1
liberar memoria ram?
Windows
nova.to 1 3,801 Último mensaje 20 Abril 2011, 16:40 pm
por el-brujo
Cómo liberar memoria RAM
Noticias
wolfbcn 1 2,211 Último mensaje 28 Octubre 2011, 18:37 pm
por [u]nsigned
Problema al liberar memoria con free()
Programación C/C++
mester 7 3,691 Último mensaje 21 Mayo 2016, 14:35 pm
por AlbertoBSD
Large to system (he borrado pelis del ordenador para liberar memoria en el disco y no deja igualmente)
Windows
Terminator5 6 4,264 Último mensaje 3 Julio 2022, 20:35 pm
por Terminator5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines