读书人

■■■VC程序内存不断增加的有关问题(

发布时间: 2012-03-22 17:43:57 作者: rapoo

■■■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.

上面的情况仅针对非模式对话框,

模式对话框则自动销毁,无需添加代码

读书人网 >VC/MFC

热点推荐