Использование try catch

Тема в разделе "LANGS.C", создана пользователем Keva, 18 апр 2007.

  1. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    есть такой кусок кода
    Код (Text):
    1.         dataSize=CertGetNameString(
    2.                 certContext,
    3.                 CERT_NAME_SIMPLE_DISPLAY_TYPE,
    4.                 0,
    5.                 NULL,
    6.                 NULL,
    7.                 0);
    8.  
    9.         tmpString = (char*)malloc(dataSize);
    10.         CertGetNameString(
    11.                 certContext,
    12.                 CERT_NAME_SIMPLE_DISPLAY_TYPE,
    13.                 0,
    14.                 NULL,
    15.                 tmpString,
    16.                 dataSize);
    иногда возникает ошибка AccessViolation как можно с помощью try catch отслеживать появление этой ошибки?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Возникает C++'ное исключение?
    Тогда общая структура обработки:
    Код (Text):
    1. try
    2. {
    3.    ... your code
    4. }
    5. catch( OneExceptionType e )
    6. {
    7.   ... exception handling ...
    8. }
    9. catch( AnotherExceptionType e )
    10. {
    11.   ... exception handling ....
    12. }
    13. catch( ... )
    14. {
    15.    ... all other exceptions ...
    16. }
    Обязателен только первый блок catch(){}
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А что мешает заглянуть в справку к языку и посмотреть эти самые try catch? Дело нескольких секунд, а на форуме ответили больше, чем через час.
     
  4. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    ДА проблема была в том что когда компилировал ничего не изменилось появлялась виндовая ошибка, а когда попробовал запустить откомпилированный проект все заработало как надо.
     
  5. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    &dataSize <--- должно быть именно так
     
  6. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    что должно быть так?
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    slow
    Не верно.

    Keva
    Сделай проверку на dataSize:
    if(dataSize > 1) { tmpString = (char*)malloc(dataSize); ... }

    А для win32 исключений лучше использовать __try..__except.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    хм.. а ну я не читал первый пост как обычно) тока название темы))
    если хчоется ловить access violation, тогда
    Код (Text):
    1. __try
    2. {
    3.    ... code ...
    4. }
    5. __except( EXCEPTION_EXECUTE_HANDLER )
    6. {
    7.    .... exception handling ....
    8. }
    Можно еще __finally добавить.

    Другой вариант - SetUnhandledExceptionFilter( )
     
  9. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Keva
    читайте Рихтера "Создание эффективных WIN32-приложений
    с учетом специфики 64-разрядной версии Windows"

    про обработку исключений больше чем у него пожалуй ни у кого не написано
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Asterix
    Здесь на сайте про SEH расписано ещё больше, но "изнутри".
     
  11. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    IceStudent
    Рихтер описывает микрософтовский SEH и С++ исключения, не вдаваясь в низкоуровневые ассемблерные дебри :)
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Так я о том же - если "как сделать", то Рихтера читать. Если "а что там внутри", то Гордона (если не ошибаюсь).