Pregunta

Estoy corriendo valgrind 3.5.0 para tratar de pérdidas de memoria calabaza en mi programa. Invoco como así:

valgrind --tool=memcheck --leak-check=yes --show-reachable=yes

Después de mi programa termina valgrind informa que

==22926==
==22926== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 1)
==22926== malloc/free: in use at exit: 20,862 bytes in 425 blocks.
==22926== malloc/free: 25,361 allocs, 24,936 frees, 772,998 bytes allocated.
==22926== For counts of detected errors, rerun with: -v
==22926== searching for pointers to 425 not-freed blocks.
==22926== checked 91,884 bytes.

A pesar de que me dice que hay 0 errores Me preocupa que el número de asignaciones y libera no coinciden. Más preocupante aún es el siguiente:

==22926== LEAK SUMMARY:
==22926==    definitely lost: 68 bytes in 1 blocks.
==22926==    indirectly lost: 20,794 bytes in 424 blocks.
==22926==      possibly lost: 0 bytes in 0 blocks.
==22926==    still reachable: 0 bytes in 0 blocks.
==22926==         suppressed: 0 bytes in 0 blocks.

No hay salida adicional, perteneciente a lo que parece ser una fuga:

==22926== 20,862 (68 direct, 20,794 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 17
==22926==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==22926==    by 0x807960B: OneTwoThree::OneTwoThree(Scenario const*) (onetwothree.cc:22)
==22926==    by 0x804DD69: main (scsolver.cpp:654)

En la línea en cuestión en el constructor de OneTwoThree Tengo el siguiente:

OneTwoThree::OneTwoThree (const Scenario* scenario) :
    Choice("123", scenario, new Solution (scenario->name(), scenario)),
    seen_(new bool [sol_->numVisits()])
{
}

más tarde, en el destructor, seen_ se elimina como así:

OneTwoThree::~OneTwoThree ()
{
    delete [] seen_;
}

No hay reasignación de memoria asociada con seen_; Sólo darle la vuelta al Bools a verdadero / falso en el transcurso de el funcionamiento de mi programa.

No puedo ver una fuga de aquí y no entiendo lo que valgrind está tratando de decirme. He estado leyendo a través de la manual de valgrind (específicamente, este ) pero No estoy mucho ser iluminado.

Puede alguien ayudarme a asimilo esta salida?

¿Fue útil?

Solución

Los comentaristas a la OP estaban en el clavo; El objeto solución está creando en que nunca se va a eliminar el constructor. He arreglado la supervisión atroz y librado del código fea la creación de nuevos objetos fuera del constructor del objeto que es responsable de ellos.

Gracias Artelius, Nikolai y Jonathan!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top