Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Visual Studio 2010 некорректно работает, Не находит ошибки доступа к памяти 
:(
    Опции темы
azesmcar
Дата 4.5.2010, 17:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  17:10 Найти цитируемый пост)
Отловом исключений должен заниматься компилятор. 

 smile с каких пор, try-catch уже никто не пишет? Т.е. компилятор должен отловить исключение, догадаться что именно мне надо сделать при этом исключении и сгенерировать код?
Цитата

Совсем не обязательно, чтобы исключение ловилось SEH. Оно может ловиться VEH, оно может ловиться обработчиком по умолчанию. 

а это уже другой вопрос, я предложил SEH, если желаете - можете предложить свой вариант отлова нужного ТС исключения, я предложил SEH и по мне - так это полностью соответствует запросу ТС. Я и не собирался перечислять все возможные варианты.

Это сообщение отредактировал(а) azesmcar - 4.5.2010, 17:15
PM   Вверх
Abyx
Дата 4.5.2010, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



Цитата(azesmcar @  4.5.2010,  17:12 Найти цитируемый пост)
 с каких пор, try-catch уже никто не пишет? Т.е. компилятор должен отловить исключение, догадаться что именно мне надо сделать при этом исключении и сгенерировать код?

я имел ввиду реализацию (implementation) try-catch
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  17:16 Найти цитируемый пост)
я имел ввиду реализацию (implementation) try-catch 

но это не значит, что обращению к нулевому указателю надо писать в try-catch -е, все равно этот код платформозависим, а так он еще и станет настройкозависимым. Уж лучше __try ... __except

Добавлено через 1 минуту и 6 секунд
Цитата(azesmcar @  4.5.2010,  17:18 Найти цитируемый пост)
но это не значит, что обращению к нулевому указателю надо писать в try-catch -е, все равно этот код платформозависим, а так он еще и станет настройкозависимым. Уж лучше __try ... __except

вообще как я уже писал - лучше избегать этого исключения, нежели ловить его.

Это сообщение отредактировал(а) azesmcar - 4.5.2010, 17:18
PM   Вверх
asp1rant
Дата 4.5.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



кончай холивар!!! вопрос в том, почему на этот раз исключение не бросается, а ведь раньше в 2008 было!
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 18:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(asp1rant @  4.5.2010,  18:06 Найти цитируемый пост)
кончай холивар!!! вопрос в том, почему на этот раз исключение не бросается, а ведь раньше в 2008 было! 

о каком исключении идет речь? о каком коде? 
я только что проверил, VS2010 ultimate при настройке Yes with SEH Exceptions (/EHa) ловит вот так
Код

try
{
    int *t = 0;
    *t = 10;
} catch (...)
{
    std::cout << "Exception" << std::endl;
}

и без этой настройки вот так
Код

__try
{
    int *t = 0;
    *t = 10;
} __except (EXCEPTION_EXECUTE_HANDLER)
{
    std::cout << "Exception" << std::endl;
}

не знаю как там себя Release Candidate ведет, но в release-е я не заметил отличий от VS2008 по этой части.

Это сообщение отредактировал(а) azesmcar - 4.5.2010, 18:19
PM   Вверх
Abyx
Дата 4.5.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



azesmcar, я проверял такой же код на RC1, все работает


asp1rant, покажи код который у тебя не работает, и напиши командную строку компилятора (последняя страница настроек)
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  18:34 Найти цитируемый пост)
azesmcar, я проверял такой же код на RC1, все работает

В тоже почему-то уверен что проблема у автора в коде smile 
PM   Вверх
xvr
Дата 6.5.2010, 11:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



2 azesmcar и Abyx - кончайте спорить, горячие финские парни  smile 
SEH - это механизм ОС Windows, try/catch - это языковая конструкция языка С++. __try/__except - это расширение языка (и С и С++) от MS (которое адаптировали к себе и другие производители компиляторов) для поддержки SEH. Т.е. try/catch не обязан как либо пересекаться с SEH - это совершенно независимые сущности. Однако производители компиляторов под Windows имеют право в своих реализациях этих компиляторов пересечь их любым удобным для них (и пользователей) способом - в частности научить try/catch перехватывать SEH (или не учить, как им захочется  smile )

PM MAIL   Вверх
azesmcar
Дата 6.5.2010, 12:16 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(xvr @  6.5.2010,  11:44 Найти цитируемый пост)
2 azesmcar и Abyx - кончайте спорить, горячие финские парни  smile 

мы уже как бы давно закончили smile 
PM   Вверх
boostcoder
Дата 6.5.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



может немного не в тему, но мне не понятно, почему этот код должен генерировать исключение?
Код

try {
   int *t = 0;
   *t = 10;
} catch (...) {
   std::cout << "Exception" << std::endl;
}

нормальный, рабочий код. завершается, как и ожидалось, с Segmentation fault.
откуда компилятору знать, что "t" указывает на NULL?
PM WWW   Вверх
xvr
Дата 6.5.2010, 12:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(boostcoder @  6.5.2010,  12:32 Найти цитируемый пост)
может немного не в тему, но мне не понятно, почему этот код должен генерировать исключение?
Не должен, но может. Все зависит от доброй воли реализаторов компилятора и/или рантайма. Чисто технически конвертация signal/fault/SEH/etc в throw вполне возможна
Цитата

откуда компилятору знать, что "t" указывает на NULL? 
Если бы он это знал, он бы обругался еще на этапе компиляции

PM MAIL   Вверх
boostcoder
Дата 6.5.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(xvr @  6.5.2010,  12:36 Найти цитируемый пост)
Не должен, но может

наверное, было бы не плохо.

Цитата(xvr @  6.5.2010,  12:36 Найти цитируемый пост)
Все зависит от доброй воли реализаторов компилятора и/или рантайма.

наверное все же от обоих(обеих?).

Цитата(xvr @  6.5.2010,  12:36 Найти цитируемый пост)
Если бы он это знал, он бы обругался еще на этапе компиляции

это понятно.
PM WWW   Вверх
W4FhLF
Дата 6.5.2010, 12:42 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(Abyx @  4.5.2010,  14:18 Найти цитируемый пост)
это аппаратные исключения


Это системное исключение, которое генерится с помощью механизма аппаратных прерываний. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
boostcoder
Дата 6.5.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(W4FhLF @  6.5.2010,  12:42 Найти цитируемый пост)
Это системное исключение, которое генерится с помощью механизма аппаратных прерываний.  

да, точно.
вспомнил из опыта программирования на асме для DOS smile 
PM WWW   Вверх
asp1rant
Дата 6.5.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



ок, вот код:

void clearHand( Hand* pHand1)
{
    int i;
    ListCard* pListCard1, *pPrevListCard;
    pPrevListCard = pHand1->pListCards;
    if (pHand1->pListCards)
        pListCard1 =  pHand1->pListCards->pNextList;
    else 
        pListCard1 = NULL;
    for(i=0; i < pHand1->countCards; i++)
    {
        free(pPrevListCard);
        pPrevListCard = pListCard1;
        pListCard1 = pListCard1->pNextList;
    }
    free(pPrevListCard);
    pHand1->countCards = 0;
    pHand1->pListCards = NULL;
}

на итерации i =5 перед красной строчкой переменная pListCard1 = 0x00000000 {pCard=??? pNextList=??? }
на строке pListCard1 = pListCard1->pNextList; VS тупо останавливает выполнение, нужно самому жать кнопку stop debugging. тот же код в 2005 студии бросает исключение.
сам код уже давно исправлен, условие изменено   i < pHand1->countCards-1, но студия то тупит(или я туплю).
командные строки:
/ZI /nologo /W3 /WX- /Od /Oy- /D "_MBCS" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\Durak.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue 
и
/OUT:"E:\Sasha\study\3_course\ОС\курсовая\Durak\Debug\Durak.exe" /NOLOGO "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\Durak.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"E:\Sasha\study\3_course\ОС\курсовая\Durak\Debug\Durak.pdb" /PGD:"E:\Sasha\study\3_course\ОС\курсовая\Durak\Debug\Durak.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE 
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.