最近遇到的一个无法new内存的问题,让我联想到了这个问题:如果一个进程在生存周期内申请(new)了很多堆内存,但是直到进程结束也没有释放(delete),那么当该进程结束后,Windows操作系统是否会帮助释放那些堆内存呢?
请教各位达人。
请教各位达人。
解决方案 »
- 用MFC,如何在界面的一个矩形中填充黑色(矩形不是画图画出来的)?
- LPDISPATCH 参数类型 判断
- ////////如何在exe程序和web之间session共享///////
- 如何得到当前windows登录用户名??
- 也许这个问题真的很菜,仅仅增加两个语句的单文档程序,不知怎么解决?
- 如何根据文件名获取到文件在windows下的全路径?
- ****知道2个DATE类型的时间,求2个时间的差,有没有现成的函数?****
- 请教一个很难的图形处理的问题,高手请进!!!!1
- 我曾经见过一些很小但时间长达数十分钟的三维动画Demo,有谁能告诉我多一些下载网址吗?最好是相关的开发网站。谢谢。
- 滚动条怎么模拟?我。。。。
- 如何读取txt文本中既有逗号,又有空格的数据?
- 请教:关于m_pszHelpFilePath
无法正常分配内存的问题原因到现在依然不明,由于代码每天都有人提交,现在已经不可再现了(除非使用当时版本的代码,再从头查找原因,目前还没有做),希望能有高人指点一二。现在描述一下当时问题的现象吧:
0. 背景:问题都是出在程序初始化过程中。该程序通过读入一个配置文件,决定使用的内存量的大小。
1. 使用内存量(不管是堆内存还是栈内存)比较少时,不会出现。
2. 使用内存量到一定程度之后,MFC框架自身的一些操作会失败,如CSocket的Create()函数调用失败,GetLastError值是10055;再如CImage的Load函数失败(单步跟进去其实是GDIPlus初始化失败),ErrorCode是8。都是跟内存量不足有关。
3. 通过调换代码顺序,可以使内存不足出错的地方变化。如先调用CImage的Load可以成功,但是Socket的Create失败。调换这两个的顺序之后,先调用Socket的Create会成功,但是CImage的Load会失败。
4. 编译出来的同一个exe,运行时不一定会出错。出错发生概率约50%。