no me libera memoria en listas dinamicas
tengo esta lista
struct est_ficha
{
int cod_asig[5];
float nota_asig;
struct est_ficha *sig;
struct est_ficha *ant;
};
typedef struct est_ficha ficha;
main()
ficha *lista.*aux;
lista = inicializar(lista);
lista = crear()//me krea un nodo
aux = lista;
free(aux);//HE AKI DILEMA
pues eso
kuando llega a free no me borra la memoria reservada
simplemente no hace nada
zalguien me dice ke falla aki?
y kuando kompilo paso por paso y me llega a free(aux) me da un error, pero kuando lo kompilo de golpe no me de ningun error
espero ke me resolvais esta duda pues me es indispensable para seguir kon mi practika
gracias
struct est_ficha
{
int cod_asig[5];
float nota_asig;
struct est_ficha *sig;
struct est_ficha *ant;
};
typedef struct est_ficha ficha;
main()
ficha *lista.*aux;
lista = inicializar(lista);
lista = crear()//me krea un nodo
aux = lista;
free(aux);//HE AKI DILEMA
pues eso
kuando llega a free no me borra la memoria reservada
simplemente no hace nada
zalguien me dice ke falla aki?
y kuando kompilo paso por paso y me llega a free(aux) me da un error, pero kuando lo kompilo de golpe no me de ningun error
espero ke me resolvais esta duda pues me es indispensable para seguir kon mi practika
gracias
Hola:
free() libera la memoria, pero no hace que el puntero apunte a NULL.
HabrÃa que ver que hace la función crear(). Si crea bien la memoria y la devuelve, el free() deberÃa funcionar bien y no dar ningún error.
Otro tema que veo raro es que a lista le asignas la salida de dos funciones: inicializar() y crear(). Además, pasas lista como parámetro a inicializar() y lista (valga la redundancia) está sin inicializar().
Salvo que la funcion inicialzar() devuelva NULL, la memoria que devuelve la pierdes sin liberarla, porque luego crear() se asigna a lista.
Echa un ojo en http://www.geocities.com/chuidiang/funciones/punteros.html a ver si te ayuda un poco con el tema de los free().
Se bueno.
free() libera la memoria, pero no hace que el puntero apunte a NULL.
HabrÃa que ver que hace la función crear(). Si crea bien la memoria y la devuelve, el free() deberÃa funcionar bien y no dar ningún error.
Otro tema que veo raro es que a lista le asignas la salida de dos funciones: inicializar() y crear(). Además, pasas lista como parámetro a inicializar() y lista (valga la redundancia) está sin inicializar().
Salvo que la funcion inicialzar() devuelva NULL, la memoria que devuelve la pierdes sin liberarla, porque luego crear() se asigna a lista.
Echa un ojo en http://www.geocities.com/chuidiang/funciones/punteros.html a ver si te ayuda un poco con el tema de los free().
Se bueno.
#include <stdio.h>/**************************************************************************/
#include <stdlib.h>/****************** MAIN *************************************************/
struct est_ficha
{
int cod_asig[5];
float nota_asig;
struct est_ficha *sig;
struct est_ficha *ant;
};
typedef struct est_ficha ficha; //ficha es un tipo de estructura "est_ficha"
//para ahorrarse eskribir "struct est_ficha ..."
void main()
{
ficha *lista, *aux;
lista = NULL;
lista = (ficha *) malloc (sizeof(lista));
lista->sig=NULL;
lista->nota_asig=1;
aux = (ficha *) malloc (sizeof(aux));
lista->ant = aux;
aux->sig=lista;
aux->nota_asig=2;
lista=aux;
aux = (ficha *) malloc (sizeof(aux));
lista->ant = aux;
aux->sig=lista;
aux->nota_asig=3;
lista=aux;
free(aux);
aux->nota_asig=10;//si se hubiera liberado esto daria error
}
aki teneis un ejemplo klarisimo de ke no me libera memoria
simplemente me pone las variables a 0
espero ke asi me podais aklarar esto
#include <stdlib.h>/****************** MAIN *************************************************/
struct est_ficha
{
int cod_asig[5];
float nota_asig;
struct est_ficha *sig;
struct est_ficha *ant;
};
typedef struct est_ficha ficha; //ficha es un tipo de estructura "est_ficha"
//para ahorrarse eskribir "struct est_ficha ..."
void main()
{
ficha *lista, *aux;
lista = NULL;
lista = (ficha *) malloc (sizeof(lista));
lista->sig=NULL;
lista->nota_asig=1;
aux = (ficha *) malloc (sizeof(aux));
lista->ant = aux;
aux->sig=lista;
aux->nota_asig=2;
lista=aux;
aux = (ficha *) malloc (sizeof(aux));
lista->ant = aux;
aux->sig=lista;
aux->nota_asig=3;
lista=aux;
free(aux);
aux->nota_asig=10;//si se hubiera liberado esto daria error
}
aki teneis un ejemplo klarisimo de ke no me libera memoria
simplemente me pone las variables a 0
espero ke asi me podais aklarar esto
la funcion inicializar lo uniko ke hace es devolver NULL
(me lo pedia el ejercicio)
y la otra funcion hace esto
ficha *nodo
nodo = (ficha *) malloc (sizeof(nodo));
scanf(\"%f\",¬a);
nodo->nota_asig=nota;
return(nodo)//devuelve la direkcion de nodo
el return hace ke me devuelva la direkcion de nodo y pasa a ser la direkcion de lista ademas la funcion insertar (no esta entera) hace ke nodo->sig = lista(NULL) y todo ese royo de apuntadores
gracias por el interes
(me lo pedia el ejercicio)
y la otra funcion hace esto
ficha *nodo
nodo = (ficha *) malloc (sizeof(nodo));
scanf(\"%f\",¬a);
nodo->nota_asig=nota;
return(nodo)//devuelve la direkcion de nodo
el return hace ke me devuelva la direkcion de nodo y pasa a ser la direkcion de lista ademas la funcion insertar (no esta entera) hace ke nodo->sig = lista(NULL) y todo ese royo de apuntadores
gracias por el interes
