c++ - QT 列表追加中报告的 Valgrind 内存泄漏

标签 c++ qt memory-leaks valgrind qlist

我在 QT C++ 中使用序列化器。看起来没问题,但 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 的问题?

最佳答案

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

但像往常一样,由于缺乏充分的理由,请使用 QList<AppNodeRecord>以首先避免这种麻烦。

关于c++ - QT 列表追加中报告的 Valgrind 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600303/

相关文章:

java - 安全线程利用

python - 使用 pybind11 通过虚函数通过引用传递 std::vector 时出现问题

c++ - 从 QGraphicsScene 中删除 QGraphicsItem/QGraphicsObject?

python - 单发 : SLOT with arguments

c++ - 在qt中创建插件

c++ - 可能的内存泄漏?

c++ - C 中 'allocated object having no declared type' 的 C++ 等价物是什么?

c++ - 在 Qt 中获取小部件的 HWND

c++ - 在QTreeView中显示图像