我用MFC编写了一个程序,资源释放的问题

自己编写的程序,但是在使用一段时间之后任务管理器中会显示他使用了很大的内存,但是在最小化还原之后会释放很多内存,我想知道怎样自动释放这些内存。帮我解决问题的可继续加分如果... 自己编写的程序,但是在使用一段时间之后任务管理器中会显示他使用了很大的内存,但是在最小化 还原之后会释放很多内存,我想知道怎样自动释放这些内存。
帮我解决问题的可继续加分 如果想碰碰运气就算了,不能解决问题我是不会给分的
1内存泄漏的问题我基本上都考虑了,基本上没有泄漏的问题,一般我都释放掉了,也不会重复的去NEW一些东西,其实我就是想知道怎样才能实现系统的最小化最大化的操作
2还有就是我由于是自己美化的页面,但是工作一段时间后图像会花掉,有没有人能提供一些自己美化加入背景图的代码。
3一楼的太搞了,一个工程少说也有上万行代码,不好发啊,呵呵
展开
 我来答
L_o_o_n_i_e
2010-11-17 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5248万
展开全部
凡动态分配了存储单元的变量,一旦不用,就要释放。
例如动态数组,不管用new,还是 malloc分配的。就要 delete 或 free. 这点,你会注意的。

但MFC程序有些地方 动态分配存储单元 对程序员来说,不能“明显看出”。 由于MFC程序是事件驱动程序,有许多子程序(函数)是不断循环执行的。这些 不能“明显看出”的 动态分配,正因为不会自动释放, 才会引起泄漏。

例如 CView OnDraw()里,如果你 建了一个 font, "画" 完字,不用了,就要释放。
CFont font;
font.CreateFontIndirect(&lf); // 这个过程隐含了分配
....
DeleteObject(font); // 不用了,就要释放

例如, 调色盘
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
....
delete[] pLP; // 不用了,就要释放

例如, 句柄
HANDLE hDIB = DDBToDIB( bitmap, BI_RGB, &pal ); // 这个过程隐含了分配
....
GlobalFree( hDIB ); // 不用了,就要释放

MFC程序比较复杂,你的泄漏是怎样引起的,要自己查找。上次有位提问的朋友,就是 CFont font; 泄漏,没找到毛病所在,觉得复杂,找到了,觉得如此简单。
月夜黑鹰
2010-11-16 · TA获得超过723个赞
知道小有建树答主
回答量:1198
采纳率:0%
帮助的人:826万
展开全部
自动释放不可能啊,堆的内存,自己释放,就是说内存管理问题
我有个办法,给一个宏,打印出所有的new的代码,包括strdup这样的方法,然后就打印在output中了

code:

char szStrAddress[500] = {0}; \
sprintf_s(szStrAddress, sizeof(szStrAddress), "%s(%d): 内存地址:(0X%x) \n", __FILE__, __LINE__, psz); \

我的这个是通用的,还就就是重写delete和new方法,这个百度一下一大堆~~

参考资料: 原创~~希望可以帮到

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Bhattacharrya
2010-11-17 · TA获得超过806个赞
知道小有建树答主
回答量:259
采纳率:42%
帮助的人:136万
展开全部
你吧问题说的很泛啊,首先这样我们很不容易对你的问题进行准确定位。。。
按照你说的现象,可能是你在显示的过程中造成了很大的内存泄露。
请检查有没有类似CDC的GetDC()和ReleaseDC(),CBitmap的Attach和Detach(),以及LoadImage()和DeleteObject()这样的绝对配对错误,它们如果不配对会造成严重的内存泄露。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自美国认真的兔子
2010-11-16 · TA获得超过644个赞
知道小有建树答主
回答量:550
采纳率:100%
帮助的人:426万
展开全部
发代码来瞧瞧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式