try
{
BYTE *pch;
pch = (BYTE *)01234; //非法地址
*pch = 5;
}
catch (...)
{
AfxMessageBox("捕獲異常");
}
但在Release方式下如果選擇了編譯器代碼優化選項,則 VC編譯器會去搜索try塊中的代碼, 如果沒有找到throw代碼,他就會認爲try catch結構是多餘的, 給優化掉。上述代碼中的異常不能被捕獲,從而迫使程序彈出錯誤提示框退出。
如改成__try, __except結構,異常即可捕獲。
而是Windows平臺特有的擴展。如果在使用過程中涉及局部對象析構函數的調用,則會出現C2712 的編譯錯誤。
仍然使用C++標準的try{}catch(..){}, 在編譯命令行中加入 /EHa 的參數。VC編譯器不會把try catch模塊給優化掉。
Project->Seting->C/C++ Project Options: 添加 /EHa