Программа завершена без ошибок и не входит в выполнение кода, кроме раздела.
Доступ к нулевому указателю работает нормально.
Но массив доступа не работает.
// exceptions_try_except_Statement.cpp
// Example of try-except and try-finally statements
#include <stdio.h>
#include <windows.h> // for EXCEPTION_ACCESS_VIOLATION
#include <excpt.h>
int filter(unsigned int code, struct _EXCEPTION_POINTERS *ep)
{
printf("in filter.\n");
if (code == EXCEPTION_ACCESS_VIOLATION)
{
printf("caught AV as expected.\n");
return EXCEPTION_EXECUTE_HANDLER;
}
else
{
printf("didn't catch AV, unexpected.\n");
return EXCEPTION_CONTINUE_SEARCH;
};
}
int main()
{
int* p = 0x00000000; // pointer to NULL
printf("hello\n");
__try
{
printf("in try 1\n");
__try
{
printf("in try 2\n");
//*p = 13; // causes an access violation exception;
int v[1000];
for(int i=0;i<0xffff;i++)
v[1000+i]=i;
}
__finally
{
printf("in finally. termination: \n");
printf(AbnormalTermination() ? "\tabnormal" : "\tnormal");
printf("\n");
}
}
__except(filter(GetExceptionCode(), GetExceptionInformation()))
{
printf("in except\n");
}
printf("world\n");
}
это просто вывод
hello
in try 1
in try 2
Я ожидаю, что это может войти в функцию фильтра.
Как я могу позволить программе выполнить функцию фильтра перед завершением процесса?