Ver Mensaje Individual
  #7 (permalink)  
Antiguo 12/04/2006, 07:20
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Bueno no he revisado el código, dudo que alguien lo haga :P

Puede que el problema venga de los objetos temporales que uses entre medio del camino. La verdad es que requiere práctica saber cuántos objetos se crean y se destruyen sin que te des cuenta.

El problema típico es que no hayas creado un constructor copia o operador de asignación adecuado y te lo haya hecho el compilador. ¿Lo has hecho?

Si no tienes un constructor copia, cuando hagas algo así:

objeto X(hola,15,12);
objeto Y = X;

se habrá llamado a 1 new (objeto X), y a 2 delete. Cuando haces "Y=X", el compilador copia la dirección del puntero de X a Y, resultando en que tienes dos objetos iguales, SÍ, pero apuntando al mismo contenido. Es decir, cuando se destruyan los objetos, eliminarás 2 veces la misma memoria.

Resultado: lo que te dice la glibc claramente: "double free", has liberado dos veces la memoria.

Lo mismo ocurre con el operador de asignación al tratar de hacer:

objeto X(hola,15,15);
objeto Y;
Y = X;

Tranquilo, es un error de novato que nos ha pasado a todos ;) Recuerda: Nunca dejes que el compilador cree el constructor copia / operador de asignación el sólo.

Algunos compiladores incluso permiten deshabilitar esa característica (estándar en C++), para que nunca te olvides de implementarlos.