QMap 是否生成内存泄漏
Is QMap generating memory leaks?
作为新手valgrind用户,我无法弄清楚它输出以下消息的原因
1 块中的 40 个字节肯定会丢失
有问题的代码行如下:
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,因为存储的项目将存在于堆中。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏