2009-11-30 4 views
20

Tengo problemas con un código bastante complejo. No pude producir un pequeño fragmento que reproduzca el error, así que trataré de explicar el problema en palabras.¿Qué puede causar el error de "la lista de doble enlace corrupto"?

El código bloquea aleatoriamente con el error

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 *** 

Depuración mostró que se trata de la línea donde los códigos libera un objeto. Parece que no hay nada malo con el objeto. Existe, y puedo acceder a sus datos en el momento en que ocurre el error. El destructor del objeto es trivial y no hace nada.

Por lo tanto, estoy atascado. ¿En qué tipo de circunstancias espera que 'libre' falle?

+8

Parece que estás corrompiendo tu memoria en otro lugar y esto es solo un efecto secundario. –

Respuesta

11

Intenta ejecutar tu programa bajo Valgrind. Puede indicarle una causa anterior, mientras que gdb solo está entrando donde ya ha ocurrido el daño.

+1

Gracias. Probaré eso. Podría haberlo pensado yo mismo ... Es realmente lento y como no puedo reproducir el error fácilmente, puede llevar un tiempo. – hanno

+1

¿cómo lo resolvió? ¿Tienes alguna idea de por qué sucedió esto porque estoy teniendo el mismo problema? –

+2

@AmitBhaira: No lo resolví, y no creo que comentar aquí vaya a llamar la atención de Hanno. Supongo que Hanno simplemente probó lo que sugerí, y que Valgrind le mostró el problema que corrompía su lista. ¿Has probado Valgrind? No hay una solución única y simple para esta clase de problema. Los problemas de corrupción en la memoria son notoriamente difíciles de rastrear, ya que pueden tener tantas causas diferentes, y el efecto visible de la corrupción puede aparecer lejos de la causa real del daño original. –

Cuestiones relacionadas