Frage

Ich bin mit valgrind 3.5.0, um zu versuchen und Squash-Speicherlecks in meinem Programm. Ich rufe sie als so:

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

Nach meinem Programm valgrind beendet berichtet, dass

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

Trotz mir zu sagen, dass es 0 Fehler Ich bin besorgt darüber, dass die Zahl der Zuweisungen und frees nicht übereinstimmen. Mehr Besorgnis erregend ist noch folgende Möglichkeiten:

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

Es gibt zusätzliche Ausgabe zu beziehen, was scheint, ein Leck zu sein:

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

In der Zeile in Frage im Konstruktor von OneTwoThree Ich habe folgende:

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

später, im destructor, seen_ wird als so gelöscht:

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

Es gibt keine Neuverteilung der Speicher mit seen_ verbunden ist; Ich blättere nur die bools auf true / false im Laufe des läuft mein Programm.

Ich kann kein Leck hier sehen, und ich verstehe nicht, was valgrind versucht, mir zu sagen. Ich habe gelesen, durch die valgrind Handbuch (genauer gesagt, diese ), aber Ich bin nicht erleuchtet viel wird.

Kann jemand mir helfen, diese Ausgabe grok?

War es hilfreich?

Lösung

Die commen zum OP waren genau richtig; Die Lösung Objekt erstellt wird, in dem Konstruktor wurde nie gelöscht werden. Ich habe die eklatante Aufsicht festgelegt und von dem hässlichen Code Schaffung neue Objekte außerhalb des Konstrukteurs des Objekts losgeworden, die für sie verantwortlich ist.

Danke Artelius, Nikolai und Jonathan!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top