您好我正在使用以下方法在MFC中创建基于对话框的应用程序:
BOOL CClockMasterDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
m_ModeTabs.Create(this,WS_CHILD | WS_VISIBLE, 0);
}
如果我使用以下内容在m_ModeTabs
函数中销毁CClockMasterDlg::OnInitDialog
,那么
m_ModeTabs.DestroyWindow();
当我将它放入CClockMasterDlg::OnDestroy()
时,我没有记忆但是泄漏我得到了内存泄漏,甚至很难被调用并返回true
。
我不相信OnDestroy
OnInitDialog
是相反的,但那么功能是什么?没有OnExitDialog
。
检测到内存泄漏!
转储对象 - >
{601}客户端阻塞在0x00AEED48
,子类型为c0,长度为212字节。
CMFCVisualManager
上的$00AEED48
对象,长度为212个字节
对象转储完成。
程序[5312] ClockMaster.exe: Native
已退出代码2(0x2)。
即使是强硬的窗口应该被自动销毁,因为它不是指针,我仍然不应该因为内存泄漏?自从放置
m_ModeTabs.DestroyWindow();
在OnInitDialog
函数创建后解决了内存泄漏问题,它真的不能引起其他问题吗?删除m_ModeTabs.Create(...
也解决了内存泄漏问题,因此我非常确定其m_ModeTabs
导致内存泄漏。
答案 0 :(得分:1)
以为你没说,我假设m_ModeTabs是CClockMasterDlg的子窗口。在这种情况下,或类似的情况下,您不必显式调用DestroyWindow。当一个窗口由Win32编辑Destroy()时,它的所有子窗口也会被销毁。
由于您将m_ModeTabs声明为常规变量(而不是指针),因此在CClockMasterDlg的析构函数期间,C ++运行时将自动释放其拥有的内存。
答案 1 :(得分:1)
我实际上遇到的一个错误是“在MFC中为Visual Studio的下一个主要版本修复”。
在仅对话框mfc应用程序中使用CVSListBox时发生内存泄漏。
有关错误的信息和几种解决方法可以在这里找到:
https://connect.microsoft.com/VisualStudio/feedback/details/646445/cvslistbox-produces-memory-leaks
http://connect.microsoft.com/VisualStudio/feedback/details/565327/memory-leaks-using-c
关于这个错误的另一份报告:
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/8870974f-1414-4dd7-b7c3-a1c320c0e91e
第一个链接的报价:
您好,
感谢您的报告。此问题已在MFC中修复为下一个 Visual Studio的主要版本。
Pat Brenner Visual C ++库开发