在MFC中new失败会抛出CMemoryException异常而不是返回NULL;
网上说的用 new (nothrow) 也提示nothrow不认识。
所以只有使用try catch 来处理
我不太懂他们执行的流程。一般new失败,别人都是在catch中使程序退出若是我一定要new成功呢,如何使
try{new}catch(CMemoryException ex)
{////
}
一直try到我满意为止?有人说try catch可以返回它调用的地方一直new到你满意。
具体该如何写呢?我不希望new失败,new失败后也要想办法让它new成功。有什么好办法吗?
(退出程序很显然是不行的。你遇到过:运行游戏之类的程序,然后说,对不起你的内存不足~然后退出的吗)

解决方案 »

  1.   

    你怎么new的??是不是内存不够了啊 
      

  2.   

    不希望new失败,new失败后也要想办法让它new成功通常new失败之后是退出程序.
    比如
    int* p = new[0xffffffff];这个基本上都是new失败的. 至少在win32上是无法成功的.
      

  3.   

    使用new handler 设置一个不干事的handler函数............
      

  4.   

    内存很够 大大的够 估计是new的 size值过大 或是错误 要么就是-1 总之 这个size是网络那头传过来的 我也不知道多少通常new失败之后是退出程序.  
    是的 我看到很多人catch到异常
    就是exit(1);的多
    要么就是做些擦屁股的活,然后终止程序可是你总不希望你玩wow时因为内存不足退出?
    当然只是比喻。我知道是我的程序问题了。但是我就是希望new能成功 抛开一个错误的size不讲若是内存足够,并且size是一个合法值 new一定是100%成功的了?
      

  5.   

    ....
    即使内存够也不一定100%成功
    try{
     new xxxxx;
    }catch(...){返回错误什么的.
    }
      

  6.   

    我知道是我的程序问题了。但是我就是希望new能成功 抛开一个错误的size不讲若是内存足够,并且size是一个合法值 new一定是100%成功的了?如果成立 你 try 做什么??
      

  7.   

    还是改变一下代码吧,换换内存分配策略,如果一直new大内存new不到,你又不停的new不是死循环了。
    bLL = true;
    while(bLL)
    try{new
    bLL = false;
    }catch(CMemoryException ex)
    {
    bLL = true;
    ////