Обработка исключений в MFC - PullRequest
       1

Обработка исключений в MFC

1 голос
/ 23 сентября 2010

Я получил это исключение в моей программе:

Необработанное исключение в 0x0051cce0 в JSONDataParsing.exe: 0xC0000005: Место чтения нарушения доступа 0x00000004

.

Я пытался поймать исключение, но безрезультатно.Я знаю, где возникает проблема.Но хотел знать, как я могу поймать исключение.Я использовал try, catch блок вокруг кода, где происходит исключение.

Это исключение, которое не может быть перехвачено?

Операторы catch:

catch (bad_alloc&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"bad_alloc \n");

            OutputDebugString(msgbuf);
        }
        catch (bad_cast&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"bad_cast \n");

            OutputDebugString(msgbuf);
        }
        catch (bad_exception&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"babad_exceptiond_alloc \n");

            OutputDebugString(msgbuf);
        }
        catch (bad_typeid&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"bad_alloc \n");

            OutputDebugString(msgbuf);
        }
        catch( CMemoryException* e )
        {

            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"CMemoryException \n");

            OutputDebugString(msgbuf);
            // Handle the out-of-memory exception here.
        }


        catch( CFileException* e )
        {

            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"CFileException \n");

            OutputDebugString(msgbuf);
            // Handle the file exceptions here.
        }

        catch( CException* e )
        {

            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"CException \n");

            OutputDebugString(msgbuf);
            // Handle the exception here.
            // "e" contains information about the exception.
            e->Delete();
        }

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Вы можете перехватить такое исключение только с помощью специального обработчика try-catch:

try
{
  // code that triggers such an exception. for example:
  int * a = NULL;
  *a = 0;
}
catch (...)
{
  // now that exception is handled here
}

Но, как правило, это плохая практика. Вместо этого вы не должны получать такое исключение, а проверять свои параметры и переменные.

Смотрите здесь для более подробной информации: http://members.cox.net/doug_web/eh.htm

0 голосов
/ 05 марта 2014

Этот тип исключения низкого уровня можно отловить с помощью оператора __try -except, но вы должны устранить причину, а не сообщать об этом. В VS во время отладки нажмите CTRL + ALT + E и проверьте все исключения там, затем продолжайте запускать приложение, пока не произойдет исключение. Приглашение остановится на ошибочной линии. Увидеть http://msdn.microsoft.com/en-us/library/s58ftw19.aspx для деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...