CToolTipCtrl使用过程中出现内存泄漏的解决求助
各位大佬好,我在做MFC项目时使用CToolTipCtrl控件,现在检测到内存泄漏问题,试了一些清理操作还是没解决,特意来求助大家!
我先实现了tooltip的初始化和消息转发逻辑:
void CDoDlg::InizializzaToolTip(void) { CString strToolTip; ///< Stringa da mostrare. if (m_ToolTip1.Create(this) == FALSE) { AfxMessageBox(strToolTip, MB_ICONERROR); } else { m_bTTIniz = true; strToolTip.LoadString(IDS_STRING119); //[ITA] Click per aprire una nuova fustella. m_ToolTip1.AddTool(&m_button, strToolTip); m_ToolTip1.Activate(TRUE); } } BOOL CDoDlg::PreTranslateMessage(MSG* pMsg) { if (m_bClose == false) { m_ToolTip1.RelayEvent(pMsg); } return CDialogEx::PreTranslateMessage(pMsg); }
之后在对话框的析构函数里做了资源清理:
CDoDlg::~CDoDlg() { if (m_pArt) delete m_pArt; if (m_pImageList) m_pImageList->DeleteImageList(); m_ToolTip1.DestroyWindow(); }
现在运行程序后检测到内存泄漏,具体日志如下:
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {25320} normal block at 0x0FD24F48, 26 bytes long.
Data: < %mP > B0 25 6D 50 04 00 00 00 04 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {25319} normal block at 0x0FDE9978, 168 bytes long.
Data: < $5b> 00 00 00 00 CD CD CD CD 00 00 00 00 A5 24 35 62
我自己排查了一下,strcore.cpp的泄漏应该和CString对象有关,plex.cpp的则是MFC内部的链表内存块。我猜测是不是tooltip的清理步骤有问题?比如是不是应该先移除所有添加的工具,再调用DestroyWindow?或者还有其他我没考虑到的细节?
希望有经验的大佬能帮我分析下问题所在,给出解决办法,谢谢大家!
备注:内容来源于stack exchange,提问作者student_qt




