crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> выход индекса за пределы дозволеного, философия
Litkevich Yuriy
  опции профиля:
сообщение 21.4.2010, 11:57
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


у меня возник вопрос - "а хорошо ли программе падать?"

Есть перегруженный оператор [], в него передаётся индекс, и внутри оператора сделан assert на случай выхода индекса за границы разрешённого диаппазона.

Вроде так многие делают. Но правильно ли это?

Может правильнее поступать как-то иначе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 22.4.2010, 8:35
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(BRE @ 21.4.2010, 16:01) *
IMHO, в операторе [] выход за пределы контейнера это по любому ошибка в коде программы. Ввод пользователя должен быть проверен еще до входа в этот метод. Такие ошибки должны отслеживаться еще на этапе отладки. Т.е. assert вполне удовлетворяет этим условиям, к тому же в релизе мы избавляемся от кода проверки.
Хотя, для особо дружественных программ можно использовать исключение, и при его возникновении сообщать пользователю, что произошла внутренняя ошибка # ... и ему нужно связаться с разработчиками.

вот тоже так думаю. и "особая дружественность" тут ни при чём. любой эксепшн должен обрабатываться и не приводить к обрушению программы. это ненормальное программирование, если программист позволяет своей программе просто так взять и рухнуть, возможно, потеряв данные и запортив работу пользователя. вообще, неважно, даже если у программы нет пользователя и она работает в сервисном режиме - то тогда проблема становится ещё более актуальна: при неожиданном сбое не упасть, записать инфу в лог и продолжить работу.

Цитата(Tonal @ 22.4.2010, 10:27) *
Цитата(Litkevich Yuriy @ 21.4.2010, 16:41) *
...И к сожалению в С\С++ нет типа диаппазона...

boost::range

да, тоже вариант: использование более надёжных объектов для хранения данных. у буста есть структуры для хранения произвольных данных, для обозначения "не числа" (т.е. переменная может содержать информацию, что её значение не валидно) и т.п. так что осваивайте и используйте на здоровье.

Сообщение отредактировал Iron Bug - 22.4.2010, 8:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Litkevich Yuriy   выход индекса за пределы дозволеного, философия   21.4.2010, 11:57
- - DIMEDROLL   Цитата(Litkevich Yuriy @ 21.4.2010, 11:57...   21.4.2010, 12:05
- - Litkevich Yuriy   вообще я всюду стараюсь использовать не просто int...   21.4.2010, 12:41
- - BRE   IMHO, в операторе [] выход за пределы контейнера э...   21.4.2010, 13:01
- - Litkevich Yuriy   в случае источником индекса со стороны пользовател...   21.4.2010, 13:10
- - BRE   Все внешние данные, не важно откуда они приходят, ...   21.4.2010, 13:21
- - Tonal   Цитата(Litkevich Yuriy @ 21.4.2010, 16:41...   22.4.2010, 7:27
- - Iron Bug   Цитата(BRE @ 21.4.2010, 16:01) IMHO, в оп...   22.4.2010, 8:35
|- - BRE   Цитата(Iron Bug @ 22.4.2010, 9:35) вот то...   22.4.2010, 9:01
- - Litkevich Yuriy   Другими словами Assert внутри оператора [], это вп...   22.4.2010, 11:31
- - Andrewshkovskii   Я так понял что BRE предлагает использовать провер...   22.4.2010, 12:10
- - Litkevich Yuriy   это-то понятно. Я для случая, если всё таки прозив...   22.4.2010, 12:18
|- - BRE   Цитата(Litkevich Yuriy @ 22.4.2010, 13:18...   22.4.2010, 12:29
- - Andrewshkovskii   А как ты можешь прозевать фиктивный индекс? Всмысл...   22.4.2010, 12:26
- - Iron Bug   имхо ассерты только для дебага. ну, в крайнем случ...   22.4.2010, 13:20
|- - Влад   Цитата(Iron Bug @ 22.4.2010, 13:20) имхо ...   23.4.2010, 11:24
- - Litkevich Yuriy   Цитата(Iron Bug @ 22.4.2010, 17:20) а так...   22.4.2010, 13:34
- - Andrewshkovskii   memory access violation ? вот тут обсуждалось   22.4.2010, 13:45
- - Litkevich Yuriy   Цитата(Andrewshkovskii @ 22.4.2010, 17:45...   22.4.2010, 13:47
- - Tonal   В Винде возникает системное исключение STATUS_ACCE...   23.4.2010, 8:46
- - Litkevich Yuriy   Цитата(Влад @ 23.4.2010, 15:24) в release...   23.4.2010, 11:41
|- - BRE   Цитата(Litkevich Yuriy @ 23.4.2010, 12:41...   23.4.2010, 11:43
|- - AD   Цитата(Litkevich Yuriy @ 23.4.2010, 12:41...   23.4.2010, 11:44
- - Litkevich Yuriy   Цитата(BRE @ 23.4.2010, 15:43) Собирай ре...   23.4.2010, 11:45


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 8:59