как отловить массив из-за ошибки доступа - PullRequest
0 голосов
/ 24 апреля 2019

Программа завершена без ошибок и не входит в выполнение кода, кроме раздела.

Доступ к нулевому указателю работает нормально. Но массив доступа не работает.

// 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

Я ожидаю, что это может войти в функцию фильтра.

Как я могу позволить программе выполнить функцию фильтра перед завершением процесса?

...