You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CToolTipCtrl使用过程中出现内存泄漏的解决求助

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

火山引擎 最新活动