*** glibc detectado *** ./a.out: doble libre o la corrupción (parte superior): 0x08901d70 *** al intentar liberar un BST

votos
0

Soy consciente de que hay algunos glibc detectados puestos, pero estaría muy agradecido si pudiera sugerir una solución para esto:

*** glibc detected *** ./a.out: double free or corruption (top): 0x08901d70 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x17c501]
/lib/libc.so.6(+0x6dd70)[0x17dd70]
/lib/libc.so.6(cfree+0x6d)[0x180e5d]
/lib/libc.so.6(fclose+0x14a)[0x16c81a]
./a.out[0x8048998]
/lib/libpthread.so.0(+0x5cc9)[0xc1fcc9]
/lib/libc.so.6(clone+0x5e)[0x1e069e]
======= Memory map: ========

Esto parece ocurrir cuando intento para liberar a un árbol binario de búsqueda:

void freetree(BNODEPTR *root)
{
        if(root!=NULL)
        {
                freetree(root->left);
                freetree(root->right);
                free(root);
        }
}  

La estructura se typedef'd a BNODEPTR

struct bnode{
        int info;
        int count;
        struct bnode* left;
        struct bnode* right;
};

Estoy llamando a la función de () usando freetree principal (raíz).

El árbol parece estar implementado correctamente como un recorrido en orden produce una salida ordenada.

El código completo se encuentra en:

http://pastebin.com/Eieu3xDa y

http://pastebin.com/jtGN6XKj

Publicado el 24/10/2011 a las 14:07
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
3

Podría tamizar a través de su código fuente, pero como se suele decir, "alimentar a un hombre un pescado ..."

  1. Compilar el código con símbolos de depuración (pasa -gal compilador). Si lo hace, se puede obtener un nombre de función en lugar de ./a.out[0x8048998]en el trazado inverso.

  2. Ejecutar el código con Valgrind de memcheck herramienta (la herramienta predeterminada). Esto le puede dar una mejor idea acerca de dónde está el error. Puede sólo tiene que instalar y ejecutar Valgrind valgrind ./a.outpara empezar.

En particular, creo que todo el árbol binario es una pista falsa. Hay otro problema en su programa en otro lugar. A partir de la traza, puedo ver que (1) el mensaje de error no se desencadena en freetreey (2) que está utilizando hilos, que son mal utilizados fácilmente.

Respondida el 24/10/2011 a las 14:10
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more