在VC的Release版本中,会对try/catch结构进行优化,如果try块中没有显示的抛出异常,则会将catch块优化掉,也就是在实际运行中会捕获不到异常,如下:
try
{
char * p = NULL;
p[0] = 0;
}
catch(...)
{
...
}
在Debug版本中会捕获到异常,但由于try中没有显式的抛出异常,catch块在Release版本中会被优化掉,所以也就捕获不到异常了。
如果要在Release版本中也捕获异常,可以在编译命令中加上/EHa参数,取消对try/catch的优化。