Domanda

Io corro Valgrind 3.5.0 per cercare di perdite di memoria da squash nel mio programma. Invoco come modo:

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

Dopo il mio programma termina valgrind riferisce che

==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.

Nonostante mi dice che ci sono 0 errori Sono preoccupato del fatto che il numero di allocazioni e libera non corrispondono. Di Più preoccupante ancora è il seguente:

==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.

Non c'è uscita aggiuntiva, di pertinenza di quello che sembra essere una perdita:

==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)

Nella riga in questione nel costruttore di OneTwoThree Ho il seguente:

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

dopo, nel distruttore, seen_ viene cancellato come:

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

Non c'è riallocazione della memoria associata a seen_; I flip solo le Caccio a false true / durante il corso di in esecuzione il mio programma.

Non riesco a vedere una perdita di qui e non capisco che cosa valgrind sta cercando di dirmi. Ho letto attraverso la manuale valgrind (specificamente, questo ) ma Non sto essere illuminato molto.

Qualcuno può aiutarmi a Grok questa uscita?

È stato utile?

Soluzione

I commentatori al OP erano esatte; L'oggetto Solution viene creato nel costruttore non è mai stato in fase di eliminazione. Ho fissato la svista madornale e deciso di eliminare del brutto codice di creazione di nuovi oggetti al di fuori del costruttore dell'oggetto che è responsabile per loro.

Grazie Artelius, Nikolai e Jonathan!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top