■■■VC程序内存不断增加的问题(见详细描述)
刚启动的时候在任务管理器中显示内存使用是5437K,我的程序是在一个基于对话框的程序,在对话框上实
现页面替换,就是单击“按钮1”的时候显示页面1,单击“按钮2”的时候显示页面2,在显示页面1的时候
,页面2是被删除的,并非隐藏,而是用了delete语句,但是当点击按钮1和2的时候看任务管理器中的内存
显示,每执行一次内存使用量都会增加,这是怎么回事呢?我在显示页面的时候使用了new来创建,但是在
显示另一页面之前就调用了delete语句,可以确保new和delete是配对出现的,但是为什么还会出现内存增
加的现象呢?
如代码:
if(m_pPage1)
{
delete m_pPage1;
m_pPage1=NULL;
}
if(!m_pPage2)
{
m_pPage2=new CPage2;
m_pPage2->Create(IDD_PAGE_2,this);
GetClientRect(&m_rc);
m_pPage2->GetClientRect(&m_rcPage);
::SetWindowPos(m_pPage2->m_hWnd,HWND_TOP,m_rc.left,m_rc.top,m_rcPage.Width
(),m_rcPage.Height(),SWP_SHOWWINDOW);
}
这是显示Page2的代码,同样在显示Page1的时候也有同样的代码。
请各位帮忙解决!
[解决办法]
使用BoundsChecker检测一下
[解决办法]
在内部释放对象.
在对象本身的close中添加DestroyWindow();处理.并且不处理CDialog::OnClose();
[解决办法]
变量要消耗内存大家都知道,也知道要用delete 回收内存
但是更消耗内存的是创建好一个窗口后所占用的资源内存,
例如 DC,画刷,字体,等,这些如果没有回收则会一直保留到程序结束
所以 切换页面时不仅要 delete dlg;而且要 dlg->DestroyWindow();
[解决办法]
P.S.
上面的情况仅针对非模式对话框,
模式对话框则自动销毁,无需添加代码