找到"随机指针"与valgrind"可能失去"

时间:2017-09-03 02:44:37

标签: c++ valgrind

Valgrind抱怨在我们的大型C ++程序的一部分中可能丢失的字节。在阅读this SO questionthe manual后,可能会丢失"我想我明白错误是什么,但我不理解这个特定情况下的错误。

mpConsDbKey未在类(或派生类)中的任何位置进行修改,因此指针不会被提前或重新分配。 valgrind手册说"可能丢失"如果内存中的"随机值指向块"

,也可以声明

有没有办法知道,通过Valgrind,为什么它认为它丢失了?

如果它是随机的内存块,最好不要浪费时间寻找它......

Valgrind手册

  

"可能会丢失"。这包括上面的案例5--8(对于BBB块)。   这意味着已经有一个或多个指向该块的指针的链   发现,但至少有一个指针是内部指针。这个   可能只是内存中的一个随机值恰好指向一个   块,所以除非你知道,否则你不应该考虑这个   内部球。

源代码&错误

DvDaTestBC::DvDaTestBC()
{
    mpConsDbKey = new DvDbConsolidator; // <<== error here
}


DvDaTestBC::~DvDaTestBC()
{
    delete mpConsDbKey;
}

类型层次结构:

enter image description here

错误文字:

==2745== 88 bytes in 1 blocks are possibly lost in loss record 5,750 of 8,333
==2745==    at 0x4007D47: operator new(unsigned int) (vg_replace_malloc.c:292)
==2745==    by 0x50B5ED8: DvDaTestBC::DvDaTestBC(unsigned long, unsigned short, unsigned long, std::string const&, short) (DvDaTestBC.cpp:68)
==2745==    by 0x50BCCCE: DvDaTest::DvDaTest(unsigned long, unsigned short, unsigned long, std::string const&, DvDbAlarmConfigSet const&, Dv::ETestState, short) (DvDaTest.cpp:23)
==2745==    by 0x52157F1: DvDaMipErrorReporter::createTests() (DvDaMipErrorReporter.cpp:177)
==2745==    by 0x521427F: DvDaMipErrorReporter::DvDaMipErrorReporter(unsigned short, unsigned short) (DvDaMipErrorReporter.cpp:65)
==2745==    by 0x554DE25: DvCfgTspModuleMgrBC::createDAs() (DvCfgTspModuleMgrBC.cpp:742)

0 个答案:

没有答案