例子:
try{
CString str;
str ="1234";
AfxMessageBox(str.Mid(6,2));
}
catch(...)
{
}

解决方案 »

  1.   

    你这种异常属于异步CPU异常,一般不能用C++ 同步exception catch住它。在windows下可以使用结构化异常。例如
    __try
    {
    }
    __except(后面忘了,查查资料吧)
    {
    }
      

  2.   

    不对,这是同步异常。
    (1)CString a;
    (2)a = str.Mid(6,2);
    (3)AfxMessageBox(a);
    程序在第2步就产生了异常,就是说,在异常产生之前, 不能运行接下来的代码,怎么会是异步异常呢
      

  3.   

    原来是个ASSERT引起的,那连异常都没有。catch当然也catch不到。
    仔细看了一下Mid的源代码,发现这个没有关系,实际上release版本中会返回一个空字符串,也不会读不该读的数据。
      

  4.   

    是的,你的代码根本就不会产生异常,Mid函数不会产生异常,str.Mid(6,2)是一个空串,你只需要下次在使用它的时候判断一下是否为空就可以了。你发布为release版本,就只弹出一个空字符的提示框呢。如果象下面的代码,就什么都不会出现。
             try{
    CString str,a;
    str ="1234";
    a = str.Mid(6,2);
    }
    catch(...)
    {
    }来学习的,看到你说的情况跟我前些天出的异常差不多。