// 定义
CDialog      *m_pDlg;
CMFCTabCtrl    m_pTab;// 初始化
    m_pTab.Create(CMFCTabCtrl::STYLE_3D_VS2005, CRect(0,0,100,100), this, 1030, CMFCTabCtrl::LOCATION_TOP);
    m_pDlg = new CDialog;
    m_pDlg->Create(IDD_SHSTOCK, this);  // AddTab函数的问题,假如我注释这句代码就不会出现内存泄露 
    m_pTab.AddTab(m_pDlg, _T("采购系统"), 0);// 释放
if (m_pDlg && m_pDlg->GetSafeHwnd())
    {    
        m_pDlg->DestroyWindow();
        delete m_pDlg;
    }
Debug调试运行结束输出:
线程 'Win32 线程' (0x10bc) 已退出,返回值为 2 (0x2)。
线程 'Win32 线程' (0x480) 已退出,返回值为 2 (0x2)。
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {387} normal block at 0x0021F670, 26 bytes long.
 Data: <   ]            > 0C 00 E4 5D 04 00 00 00 04 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxbasetabctrl.cpp(304) : {386} client block at 0x0021F498, subtype c0, 72 bytes long.
a CObject object at $0021F498, 72 bytes long
Object dump complete.
程序“[5336] SHErp.exe: 本机”已退出,返回值为 2 (0x2)。

解决方案 »

  1.   

    非模态对话框的销毁一般在其PostNcDestroy 中delete this
      

  2.   

    虽然没看全部代码不能判断,但可以肯定不是微软的bug,如果MFC这么容易找到bug,
    那微软的招牌早该砸了,在确定之前,还是检查你的代码吧。
      

  3.   

    看看和这个是不是有点类似
    http://blog.csdn.net/crybird/article/details/6004040
      

  4.   

    f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxbasetabctrl.cpp(304)
    你想到了什么
      

  5.   

    可能是对话框释放的问题,按照2楼的方式试试,MSDN上有说·
      

  6.   

    在析构函数加上这句m_pTab.RemoveAllTabs()
      

  7.   

    纠正下,在继承CMFCTabCtrl类的OnDestroy方法里加RemoveAllTabs()