Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT列表追加中报告Valgrind内存泄漏 >我在QTC++中使用了一个序列化器。它看起来正常,但valgrind(memcheck工具)报告此功能存在内存泄漏_C++_Qt_Memory Leaks_Valgrind_Qlist - Fatal编程技术网

QT列表追加中报告Valgrind内存泄漏 >我在QTC++中使用了一个序列化器。它看起来正常,但valgrind(memcheck工具)报告此功能存在内存泄漏

QT列表追加中报告Valgrind内存泄漏 >我在QTC++中使用了一个序列化器。它看起来正常,但valgrind(memcheck工具)报告此功能存在内存泄漏,c++,qt,memory-leaks,valgrind,qlist,C++,Qt,Memory Leaks,Valgrind,Qlist,Valgrind cmd:Valgrind--tool=memcheck--leak check=full QDataStream &operator>>( QDataStream &in, QList<AppNodeRecord *> *objAppNodeListRecord) { quint32 len; in >> len; objAppNodeListRecord->clear(); for(q

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输出:

==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)
==19503==1445(68个直接,1377个间接)字节在1568的丢失记录1540中肯定丢失
==19503==at 0x4026351:运算符新(无符号整数)(vg_替换_malloc.c:255)
==19503==0x8058562:运算符>>(QDataStream和,QList*)(zbds_NodeMgmt.cpp:206)
==19503==0x804D53C:main(main.cpp:53)

这可能是valgrind问题吗?

QList不负责解除分配附加到它的
AppNodeRecord
指针,您必须手动执行(
Qdeletall
在这种情况下可能会有所帮助)


但是像往常一样,由于缺乏充分的理由,首先使用
QList
来避免这种麻烦。

QList不负责解除分配附加到它的
AppNodeRecord
指针,您必须手动操作(
qdeletall
在这种情况下可能会有所帮助)


但是像往常一样,由于缺乏充分的理由,首先使用
QList
来避免这种麻烦。

Valgrind memcheck只会告诉您内存泄漏。如果与您的情况一样,有一个函数,它会报告内存分配发生的函数(
new
语句)

要消除此泄漏,必须删除已动态分配的所有元素。在您的情况下,正如Idan K所写,您可以在类的析构函数中使用通用Qt算法
Qdeletall(objappNodeRecord)
,或者您可以使用更显式的版本,如下所示:

foreach (AppNodeRecord *element, objAppNodeListRecord)
{
  delete element;
}

Valgrind memcheck只告诉您内存泄漏。如果与您的情况一样,有一个函数,它会报告内存分配发生的函数(
new
语句)

要消除此泄漏,必须删除已动态分配的所有元素。在您的情况下,正如Idan K所写,您可以在类的析构函数中使用通用Qt算法
Qdeletall(objappNodeRecord)
,或者您可以使用更显式的版本,如下所示:

foreach (AppNodeRecord *element, objAppNodeListRecord)
{
  delete element;
}

“in>>tmp;”做什么?它是否填充指向的AppNodeRecord或更改指针的值?它是一个反序列化程序。它用innformation填充对象。“in>>tmp;”做什么?它是否填充指向的AppNodeRecord或更改指针的值?它是一个反序列化程序。它用信息填充对象。