2
作爲新手的valgrind用戶本人不能找出爲什麼它輸出以下消息QMap是否會產生內存泄漏?
原因在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? 謝謝!
編輯: 也許這是相關的信息:只有當我終止應用程序時才顯示消息。
可能有一些內存會爲程序的其餘部分靜態分配內存。那麼它不能被認爲是泄漏。 –
你沒有向我們展示如何創建和銷燬你的'KukaDevice'以及你如何退出程序。如果你的對象仍然存在,你調用'exit()'或'QApplication :: quit()'(而不是從'main'返回),那麼不會調用'〜QMap()'析構函數。你應該能夠將你的代碼減少到能夠演示問題的[mcve]。 –