12/04/2006, 07:20
|
| | 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. |