QT C++에서 직렬기를 사용하고 있습니다. 괜찮아 보이지만 valgrind (memcheck 도구)가이 함수에서 메모리 누수를보고하고 있습니다.QT 목록에 Valgrind 메모리 누수가 추가되었습니다.
Valgrind의 명령 : 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
디시리얼라이저입니다. 객체를 정보로 채 웁니다. –