Valgrind抱怨在我们的大型C ++程序的一部分中可能丢失的字节。在阅读this SO question和the manual后,可能会丢失"我想我明白错误是什么,但我不理解这个特定情况下的错误。
mpConsDbKey
未在类(或派生类)中的任何位置进行修改,因此指针不会被提前或重新分配。 valgrind手册说"可能丢失"如果内存中的"随机值指向块"
有没有办法知道,通过Valgrind,为什么它认为它丢失了?
如果它是随机的内存块,最好不要浪费时间寻找它......
Valgrind手册
"可能会丢失"。这包括上面的案例5--8(对于BBB块)。 这意味着已经有一个或多个指向该块的指针的链 发现,但至少有一个指针是内部指针。这个 可能只是内存中的一个随机值恰好指向一个 块,所以除非你知道,否则你不应该考虑这个 内部球。
源代码&错误
DvDaTestBC::DvDaTestBC()
{
mpConsDbKey = new DvDbConsolidator; // <<== error here
}
DvDaTestBC::~DvDaTestBC()
{
delete mpConsDbKey;
}
类型层次结构:
错误文字:
==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)