Code:
// exceptions_try_except_Statement.cpp
// Пример try-except и try-finally
#include <iostream>
#include <windows.h> // для EXCEPTION_ACCESS_VIOLATION
using std::cout;
using std::endl;
// функция-филтр
int filter(unsigned int code, struct _EXCEPTION_POINTERS *ep) {
cout<<"in filter."<< endl;
if (code == EXCEPTION_ACCESS_VIOLATION) {
cout<<"caught AV as expected."<<endl;
return EXCEPTION_EXECUTE_HANDLER; // если авария
}
else {
cout<<"didn't catch AV, unexpected."<< endl;
return EXCEPTION_CONTINUE_SEARCH; // если нет аварии
};
}
int main()
{ int* p = 0x00000000; // специально нулевой указатель
cout<<"hello"<< endl;
__try{
cout<<"in try 1"<< endl;
__try{
cout<<"in try 2"<< endl;
*p = 13; // access violation
}__finally{
cout<<"in finally. termination: "<< endl;
cout<<(AbnormalTermination() ? "\tabnormal" : "\tnormal")<< endl;
}
}__except(filter(GetExceptionCode(), GetExceptionInformation())){
cout<<"in except"<< endl;
}
cout<<"world"<< endl;
}






