最近遇到的一个无法new内存的问题,让我联想到了这个问题:如果一个进程在生存周期内申请(new)了很多堆内存,但是直到进程结束也没有释放(delete),那么当该进程结束后,Windows操作系统是否会帮助释放那些堆内存呢?
请教各位达人。

解决方案 »

  1.   


    无法正常分配内存的问题原因到现在依然不明,由于代码每天都有人提交,现在已经不可再现了(除非使用当时版本的代码,再从头查找原因,目前还没有做),希望能有高人指点一二。现在描述一下当时问题的现象吧:
    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%。
      

  2.   

    最好自己new的自己delete释放,这个是程序员的责任~