开始的代码在一个Win32 Console的空工程里建立的,在一个构造函数里写了大致如下的语句:
myclass()
{        
try{
    Blocks = new T[size];
    }
catch (CException e) 
{
            AfxMessageBox("Can't allocate memory now!");
            Blocks = NULL;
            return;
}
}size大约为6M左右
现在在一个MFC对话框程序里引用这个类,可是new失败的时候直接就出个框,然后程序退出,而不是出我自己的提示
为什么?

解决方案 »

  1.   

    先确认一下,是release版本还是debug版本
      

  2.   

    new失败后的处理,各编译器是不同的,有的抛出异常,有的返回NULL
      

  3.   

    MFC的异常对象CException能捕获C++的异常?!CException对象是MFC里的异常对象,而new里面抛出的是C++的异常
    如果你不清楚自己想捕获的异常是什么类型,你可以用catch(...)捕获所有异常。
    myclass() 
    {         
        try
        { 
            Blocks = new T[size]; 
        } 
        catch(...)
        {
            AfxMessageBox("Can't allocate memory now!"); 
            Blocks = NULL; 
            return; 
        }
      

  4.   

    设置一个断点看看是否确实是new失败了  BYTE *pTest = NULL;
      try
      {
        pTest = new BYTE[100*1024*1024]; //100MB
      }
      catch(CMemoryException *e)
      {
        TCHAR   szCause[256];
        e->GetErrorMessage(szCause,sizeof(szCause));
        AfxMessageBox(szCause);
        e->Delete();
      }
      if(pTest)
        delete pTest; 
      

  5.   

    异常类型不对,当然会抓不住,如果不确定错误类型为了让程序不至于退出可以捕获任何错误然后跳过:
    try
    {
    }
    catch(...)
    {
    }
      

  6.   

    try - catch是捕获throw的,如果你没有执行throw当然catch不到。
      

  7.   

    嗯,没作过研究。
    不过据我所知,VC6.0的new运算符失败并不抛出异常,而是返回null,更高版本的才抛出异常。
    如果你的能捕捉异常的话,试试TRY-CATCH(,)-END_CATCH宏。
      

  8.   

    __try
    {
    }
    __except(1)
    {}