PDA

Ver la versión completa : Problema liberando memoria



kmkzk
15/11/2004, 11:27
Hola!
Tengo un problemilla con un programa que estoy haciendo, y escribo aqui para ver si alguien me puede echar una mano :)
El caso es que tengo que cargar datos a una lista enlazada desde un fichero, y repetir este proceso varias veces, con diferentes ficheros.
Osea, cargar datos de ficheros diferentes en una lista enlazada. (no al mismo tiempo; primero uno, limpiar la lista, y otro fichero...)
Cuando hago la primera carga, todo funciona bien, los datos se cargan bien en memoria. Antes de hacer la segunda carga, tengo una funcion que libera la memoria (un bucle que pasa por todos los nodos de la lista y hace 'gp_mem_func.free' en cada nodo). Todo lo compila bien, pero cuando lo ejecuto en la GP, al hacer la liberacion de la memoria se me resetea :(
Alguien sabe a causa de que puede pasar esto?
Los ficheros que cargo no son muy grandes, asi que sin liberar la memoria, si asignaramos el valor NULL al puntero donde se carga toda la lista, deberia hacer una nueva carga sin problemas, no? Lo he probado, y se resetea tambien.
He revisado el codigo mil veces y no se que puede ser.
No tengo mucha experiencia en esto de memoria dinamica, asi que seguramente estare haciendo alguna cagada gorda :D

Alguna idea?

Gracias y un saludo!

theNestruo
15/11/2004, 15:33
Postea el código de bucle de destrucción de la lista enlazada, que ya me huelo dónde está el problema... (¿haces primero la liberación y luego avanzas al siguiente nodo?)

oankali
15/11/2004, 16:31
Ya veo en lo que piensas theNestruo pero recuerdo un caso uno en que le daba ese tipo de problemas y era porque no utilizaba correctamente los punteros al momento de crear la lista.
Osea que, kmkzk, postea también el bucle de creación de la lista por si acaso y ya veremos lo que puede ser.

Por si no te sales con la tuya, en mi web (http://www.nekanium.com/gp32) encontrarás la libreria list.h (http://www.nekanium.com/gp32/cLibraries.htm#List) que justamente permite crear lista de objetos de forma dinámica. En el apartado documentación (http://www.nekanium.com/gp32/src/docs/list/ListRoutines.htm) encontrarás una breve descripción de cada función.

kmkzk
18/11/2004, 21:58
Hola,
Ya he solucionado el problema, al final el problema era que los datos que leia desde un fichero tenian un pequeño fallo y el programa petaba, jeje
de todas formas he echado un vistado a tus listas, oankali, y me han ayudado mucho a arreglar un poco el codigo y hacerlo poco mas limpio :)
Muchas gracias a los dos
un saludo!