Marcos Medina
2006-04-25 14:05:20 UTC
Hola amigos, el problema que me da al ejecutar el programilla es el
siguiente:
*** glibc detected *** free(): invalid next size (fast): 0x080f0018 ***
¿Alguien sabe a que se refiere?
Utilizo unas estructuras con punteros y la función que libera memoría
es recursiva:
void libero_pic_vall(PIC_VALL pico)
{
LISTA lista,aux;
if (pico->sucesores == NULL)
{
printf("liberamos nodo hoja\n");
free(pico);
return;
}
lista=pico->sucesores;
while (lista != NULL)
{
libero_pic_vall(lista->hijo);
aux=lista;
lista=lista->sig;
printf("liberamos un elemento lista\n");
free(aux);
}
printf("liberamos nodo intermedio\n");
free(pico);
return;
}
Cuando pongo, free(&pico) no da esté error, da otro violación de memoría
pero lo da más tarde, o sea que la función recursiva avanza mucho más. Con
el otro error lo da nada más llegar al nodo hoja, o sea al primer free().
La definición de las estructuras son:
typedef struct pic_vall * PIC_VALL;
typedef struct lista * LISTA;
struct lista
{
PIC_VALL hijo;
LISTA sig; /* lista de sucesores */
};
struct pic_vall
{
char letra; // letra del nodo
int num_suc; // numero de sucesores
PIC_VALL padre; // Enlaces al padre en la estructura
LISTA sucesores; // Lista a los sucesores
};
Muchas gracias de antemano.....
Y comprenderé que no me contesteís con todo lo que he escritoooo, pero bueno
no le veo solución y a ver si alguien se animaaaa....
siguiente:
*** glibc detected *** free(): invalid next size (fast): 0x080f0018 ***
¿Alguien sabe a que se refiere?
Utilizo unas estructuras con punteros y la función que libera memoría
es recursiva:
void libero_pic_vall(PIC_VALL pico)
{
LISTA lista,aux;
if (pico->sucesores == NULL)
{
printf("liberamos nodo hoja\n");
free(pico);
return;
}
lista=pico->sucesores;
while (lista != NULL)
{
libero_pic_vall(lista->hijo);
aux=lista;
lista=lista->sig;
printf("liberamos un elemento lista\n");
free(aux);
}
printf("liberamos nodo intermedio\n");
free(pico);
return;
}
Cuando pongo, free(&pico) no da esté error, da otro violación de memoría
pero lo da más tarde, o sea que la función recursiva avanza mucho más. Con
el otro error lo da nada más llegar al nodo hoja, o sea al primer free().
La definición de las estructuras son:
typedef struct pic_vall * PIC_VALL;
typedef struct lista * LISTA;
struct lista
{
PIC_VALL hijo;
LISTA sig; /* lista de sucesores */
};
struct pic_vall
{
char letra; // letra del nodo
int num_suc; // numero de sucesores
PIC_VALL padre; // Enlaces al padre en la estructura
LISTA sucesores; // Lista a los sucesores
};
Muchas gracias de antemano.....
Y comprenderé que no me contesteís con todo lo que he escritoooo, pero bueno
no le veo solución y a ver si alguien se animaaaa....
--
Atentamente Marcos Medina
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe; he
aquí el verdadero saber."
CONFUCIO
- Filósofo chino
Atentamente Marcos Medina
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe; he
aquí el verdadero saber."
CONFUCIO
- Filósofo chino