MFC_ CString 直接转LPCSTR会内存泄漏吗? 帮忙看看,谢谢!
编写了一个MFC对话框程序,最近在检测_crtDumpMemoryLeaks检测内存泄漏时,发生大量的(有100多处)内存泄漏
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {168} normal block at 0x008622A8, 24 bytes long.
Data: < T T > A0 D7 80 58 03 00 00 00 03 00 00 00 01 00 00 00
用windbg监控了一下,内存泄漏如下:
ea37d6 NTIS!CHandleMap::FromHandle+0x00000196
e14598 NTIS!CWnd::FromHandle+0x00000038
e3a1e9 NTIS!COleControlContainer::GetDlgItem+0x00000029
e3a5bc NTIS!COleControlContainer::SetDlgItemTextA+0x0000001c
e35fac NTIS!CWnd::SetDlgItemTextA+0x0000006c
在WinUser.h中,SetDlgItemTextA的变量类型是LPCSTR(const char*),我使用的都是CString的对象,
这样会产生内存泄漏吗?
strcore.cpp 的 156 行是freedata(GetData()); 具体代码如下,这个是release时候出错啦,为什么会出现这种情况?
void CString::Release()
{
if (GetData() != _afxDataNil)
{
ASSERT(GetData()->nRefs != 0);
if (InterlockedDecrement(&GetData()->nRefs) <= 0)
156 FreeData(GetData());
Init();
}
}
PS:windbg还检测出如下问题,OnWndMsg发生内存泄漏,迷茫,帮忙看看,谢谢!
e16374 NTIS!CWnd::DefWindowProcA+0x00000034
e1441d NTIS!CWnd::Default+0x0000003d
e4e2e4 NTIS!CDialog::HandleInitDialog+0x000000e4
e194a1 NTIS!CWnd::OnWndMsg+0x00000841
e18c12 NTIS!CWnd::WindowProc+0x00000032
de87e1 NTIS!CNTISDlg::WindowProc+0x000000d1