我在QT C++中使用了一個序列化程序。它看起來不錯,但valgrind(memcheck工具)報告此函數的內存泄漏。在QT列表中報告的Valgrind內存泄漏追加
Valgrind的CMD:valgrind --tool=memcheck --leak-check=full
QDataStream &operator>>(QDataStream &in, QList<AppNodeRecord *> *objAppNodeListRecord)
{
quint32 len;
in >> len;
objAppNodeListRecord->clear();
for(quint32 i = 0; i < len; ++i)
{
AppNodeRecord *tmp=new AppNodeRecord;
in >> tmp;
objAppNodeListRecord->append(tmp);
if (in.atEnd())
break;
}
return in;
}
Valgrind的報告說,這種情況下不被釋放,但它是在QList作中使用。
AppNodeRecord *tmp=new AppNodeRecord;
Valgrind的輸出:
==19503== 1,445 (68 direct, 1,377 indirect) bytes in 1 blocks are definitely lost in loss record 1,540 of 1,568
==19503== at 0x4026351: operator new(unsigned int) (vg_replace_malloc.c:255)
==19503== by 0x8058562: operator>>(QDataStream&, QList<AppNodeRecord*>*) (zbDbs_NodeMgmt.cpp:206)
==19503== by 0x804D53C: main (main.cpp:53)
難道是一個Valgrind的問題?
什麼是「在TMP >>; 「做?它是否填充它指向的AppNodeRecord或更改指針的值? – Grissiom
這是一個解串器。它用信息填充對象。 –