![]() |
|
|
![]()
|
|
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
Доброго времени суток! Пишу код в С++Блдр 6. Следующая функция должна загружать данные из файла с заданным именем. Загрузка производится с использованием TFileStream. Если файла не существует, то функция дожна возвращать false, предварительно перехватив исключение блоком catch(...). Вместо этого получаю сообщение с текстом:
EAccessViolation Имхо, блок catch(...) перехватывает любые исключения. Почему же здесь этого не происходит.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Я давно не работал с builder-ом, потому могу ошибаться.
Если EAccessViolation действительно C++ исключение - то это может быть по причине того, что программа запущена под Debugger-ом, тогда насколько я помню Builder в любом случае показывал сообщение об ошибке, даже если оно ловиться. Еще возможен вариант, что исключение генерируется вне блока try, и еще возможно это не C++ исключение а обычный Access Violation, который ловиться через SEH. |
|||
|
||||
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
Исключение выбрасывается в конструкторе TFileStream. Я запускал проект в среде с включенными опциями:
Tools > Debugger Options... > Language Exceptions:
и получил сообщение следующего содержания: Project Project1.exe raised exception class EFOpenError with message 'Cannot open file D:\list.list'. Process stopped. Use Step or Run to continue. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
livo
Ну да, значит так оно и есть, просто дебагер перехватывает, запускай обычно и все должно быть в порядке, или просто убери
|
|||
|
||||
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
azesmcar, при выполнении приложения отдельно от среды, появляется сообщение
EAccessViolation Я включал те опции, чтобы посмотреть что скажет дебаггер билдера. Он перехватывает это исключение. Не пойму, почему мой кэтч-блок, перехватывающий ВСЕ исключения, не перехватывает исключение, возникающее при открытии несуществующего файла. |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
похоже на то, что ошибка в другом месте, т.е. на самом деле try-catch сработал, а где-то в другом участке выдал EAccessViolation.
и в чем тогда вопрос? значит все в порядке, ищи ошибку в другом месте. В дебагере пройди дальше (т.е. нажми Run) и посмотри где еще выдается ошибка. |
||||
|
|||||
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
azesmcar, действительно, ошибка была на самом видном месте!!!
azesmcar, спасибо огромное! |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
livo
проверять при удалении не надо. Удаление нулевого указателя не является ошибкой, можешь не проверять, delete сам проверяет. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |