CDialog::Create()创建非模态对话框框,若未销毁造成内存泄露,代码如下:
CTestView类中有成员变量CSetDBSource* m_SetDBSource;,CSetDBSource的基类为CDialog,
m_SetDBSource = new CSetDBSource;
m_SetDBSource->Create(IDD_SETDB_DLG,this);
m_SetDBSource->ShowWindow(SW_SHOW);
程序退出时提示如下信息:
Detected memory leaks!
Dumping objects ->
e:\code\GMP\TestView.cpp(879) : {563} client block at 0x0BA91028, subtype c0, 1432 bytes long.
a CTestView object at $0BA91028, 1432 bytes long
Object dump complete.
原因是:非模态对话框Create之后未销毁导致内存溢出。
解决办法:
为CTestView类添加DestroyWindow()函数,并添加如下代码即可:
m_SetDBSource->DestroyWindow();
delete m_SetDBSource;
注意一定要:先调用m_SetDBSource的DestroyWindow()函数销毁窗口,再释放m_SetDBSource = new CSetDBSource;申请的内存空间。
本文详细解释了在使用CDialog类创建非模态对话框时,未正确销毁对话框导致内存泄露的问题,并提供了解决方法。通过在CTestView类中添加DestroyWindow()函数并确保先销毁窗口后释放内存,可以有效避免内存泄露。

1179

被折叠的 条评论
为什么被折叠?



