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

¿Liberar toda la Memoria Dinamica a la vez?

Estas en el tema de ¿Liberar toda la Memoria Dinamica a la vez? en el foro de C/C++ en Foros del Web. Hola, Estoy haciendo una práctica en C++ y al finalizar el programa debría de liberar toda la memoria dinámica que he creado, y me gustaría ...
  #1 (permalink)  
Antiguo 23/07/2008, 14:58
 
Fecha de Ingreso: agosto-2007
Mensajes: 3
Antigüedad: 16 años, 9 meses
Puntos: 0
¿Liberar toda la Memoria Dinamica a la vez?

Hola,

Estoy haciendo una práctica en C++ y al finalizar el programa debría de liberar toda la memoria dinámica que he creado, y me gustaría preguntaros si supiérais de alguna función o algo que libere toda la memoria Dinamica que he creado de golpe.
No se si conoceis un juez online que se usa en concursos y universidad, se llama Mooshak. Es que lo he intentado poco a poco, y, en mi ordenador no me da ningun error, pero al subirlo al Mooshak me da un error "SIGBRT", y es debido a la liberacion de memoria, y no se como arreglarlo. Si pudierais ayudarme de alguna de las dos formas os lo agradecería muchisimo.
Saludos
  #2 (permalink)  
Antiguo 23/07/2008, 15:18
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: ¿Liberar toda la Memoria Dinamica a la vez?

Una manera de resolver este tema seria tener tu propio administrador de memoria, vale decir, en vez de directamente usar new o malloc, usar tu propia funcion, o mejor aun, un metodo estatico de una clase, esta clase recordara la memoria solicitada y la entregada, en el destructor del objeto podria estar la liberacion de toda esa memoria. Un objeto global deberia ser creado y este al finalizar el programa se destruira.

Ahora, es posible que tu problema no sea porque no liberaste la memoria, sino porque estas accediendo a memoria despues de haberla liberado, o bien accedes a mas memoria de la solicitada. Estas seguro que el problema esta en que NO se libera memoria? Como te das cuenta que ese es el problema?
  #3 (permalink)  
Antiguo 23/07/2008, 16:52
 
Fecha de Ingreso: agosto-2007
Mensajes: 3
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: ¿Liberar toda la Memoria Dinamica a la vez?

Hola CalgaryCorpus,


Gracias por responder. La primera manera creo que es bastante compleja de realizar, no? por lo menos a simple vista parece así, si estoy equivocado por favor corrigeme porque estaría muy interesado en poder hacerlo funcionar.
En lo de que es posible que no libere memoria y lo que este es accediendo a esa memoria creo que no es. La liberacion la tengo que realizar al finalizar el programa, es decir, que después no tengo que realizar nada mas y para liberar lo que hago es lo siguiente: Tengo una clase arbol, en la cual tengo una raiz que es de tipo nodoArbol, y este clase nodoArbol consta de su hijo derecho, su hijo izquierdo, un valor de tipo string y una variable info de tipo generico. Resulta que el tipo generico lo he instanciado a una lista, la cual tiene su propia funcion de eliminar que elimina toda la lista(esta funcion estoy casi seguro que funciona bien). Entonces lo que hago para eliminar es: llamo a la funcion eliminar de la clase arbol, la cual llama recursivamente a su hijo izquierdo, despues a su hijo derecho, despues llamo a la funcion eliminar de la lista (bueno, del valor generico, pero en mi caso lo he instanciado a una lista), y luego hago delete del nodoarbol. ¿Es correcto?
Si encuentras algun fallo por favor hazmelo saber.
Muchas gracias.
Saludos
  #4 (permalink)  
Antiguo 24/07/2008, 22:06
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: ¿Liberar toda la Memoria Dinamica a la vez?

No parece haber error en la descripcion. Podrias incorporar algun trozo de codigo para ver si la descripcion calza con ello?
  #5 (permalink)  
Antiguo 26/08/2008, 02:48
lna
 
Fecha de Ingreso: diciembre-2007
Mensajes: 2
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta Respuesta: ¿Liberar toda la Memoria Dinamica a la vez?

Hola CalgaryCorpus:
Tengo una duda sobre memoria dinamica, a ver si pudieras responderme...
¿Que pasa si no se libera la memoria dinamica? ¿Hasta cuando se queda reservada? Esq estoy depurando el programa y siempre hay algun error tonto antes de llegar a los destructores donde libero memoria y por tanto no se libera. En las ultimas veces que lo he ejecutado me da un error al principio (codigo que estaba bien y que no he tocado) que dice: "Unhandled exception in Simulador.exe: 0xC0000005: Access Violation" ¿Puede ser por la mem dinamica?

Otra dudilla relacionada, En el programa que estoy haciendo tengo como miembro de una clase una lista de punteros. Estos punteros apuntan a objetos creados con memoria dinamica por lo que hay que eliminarlos. ¿Cuando en la libreria std::list utilizamos la función clear() se elimina también la memoria dinamica reservada??

Ej:
std::list<int*> numeros; //es miembro de la clase

funcion()
{
int* a = new int;
a = 7;
numeros.push_back(a);
}

¿en el destructor bastaria con hacer "numeros.clear()" ??

Muchas gracias por tu ayuda,
Un saludo
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 06:37.