gpt4 book ai didi

c++ - QMap 是否产生内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:40 27 4
gpt4 key购买 nike

作为一个新手 valgrind 用户,我无法弄清楚它输出以下消息的原因

40 bytes in 1 blocks are definitely lost in loss

违规代码行如下:

void KukaDevice::_init()
{
m_ops.insert(KukaDeviceSpace::OFF , &KukaDevice::_doNothing);
m_ops.insert(KukaDeviceSpace::INITIALIZING ,&KukaDevice::_doInitialization);
m_ops.insert(KukaDeviceSpace::STARTING ,&KukaDevice::_doStarting);
m_ops.insert(KukaDeviceSpace::MONITORING ,&KukaDevice::_doMonitoring);
m_ops.insert(KukaDeviceSpace::WORKING ,&KukaDevice::_doWorking);
m_ops.insert(KukaDeviceSpace::STOPPING ,&KukaDevice::_doStop);
m_ops.insert(KukaDeviceSpace::SHUTTINGDOWN ,&KukaDevice::_doShutdown);
}

其中变量定义为:

#ifndef KukaDevice_H
#define KukaDevice_H

#include <QMap>

class KukaDevice : public QObject
{
Q_OBJECT
/// High Level Operations
void _doNothing(); /// waits 10 ms
void _doInitialization();
void _doStarting();
void _doMonitoring();
void _doWorking();
void _doStop();
void _doShutdown();

/// Initialization
void _init();

typedef void (KukaDevice::*doFunc)();
typedef QMap<int,doFunc> OpStack;
OpStack m_ops;
};

#endif // KukaDevice_H

有什么提示吗? QMap 是否有可能产生泄漏?我以错误的方式使用 QMap 吗?谢谢!

编辑:也许这是相关信息:仅当我终止应用程序时才会显示该消息。

最佳答案

Valgrind 所说的是当您退出应用程序时,QMap 中仍然有分配的内存。事实上,对于您添加了一堆您永远不会清理的引用的任何容器实现都是如此。

如果该对象是一个在应用程序的整个生命周期内都存在的长生命周期对象,那么它就不是真正的泄漏。但是,如果您销毁了 KukaDevice 类的对象,则需要确保已清除 QMap,因为存储的项目将存在于堆中。

关于c++ - QMap 是否产生内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22119408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com