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;申请的内存空间。