║XLR8║
|
|||||||||||
1 | |||||||||||
out_of_range exaptions и условные операторы26.02.2011, 21:43. Показов 2317. Ответов 17
Метки нет Все метки)
(
Меня интересует следущее: почему этот код не выдает ошибок типа "индекс вне границ массива"
0
|
|
26.02.2011, 21:43 | |
Ответы с готовыми решениями:
17
Решение неравенства используя условные операторы Вычисления и условные операторы Арифметические выражения и условные операторы
|
2 / 2 / 1
Регистрация: 23.02.2011
Сообщений: 13
|
||||||||||||||||
26.02.2011, 21:50 | 2 | |||||||||||||||
Всё очень просто: массив в С - это последовательность указателей на нечто типа элементов массива, поэтому при превышении границ диапазона указатель становится "битым" (
![]()
1
|
║XLR8║
|
||||||
26.02.2011, 21:55 [ТС] | 3 | |||||
Не по теме: Во блин, на "человеческом" C# вываливается за милую душу, а на плюсах пашет ппц (: Добавлено через 1 минуту Значит код
0
|
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
26.02.2011, 22:39 | 4 |
Ни в С, ни в C++ выход за границы простого массива не контролируется. За этим нужно следить самостоятельно. Для таких контейнеров как std::vector и std::string контроль выхода за границы массива при обращении к элементам через operator[] также не осуществляется, для этих целей используется специальный метод at. Вот этот метод как раз и выбрасывает исключение out_of_range.
1
|
В астрале
![]() 8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
27.02.2011, 01:51 | 5 | |||||
0
|
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
27.02.2011, 02:09 | 6 |
Ссылку на соответствующее место в стандарте неплохо бы увидеть.
И это будет работать в релизе?
0
|
В астрале
![]() 8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
27.02.2011, 03:04 | 7 | |||||
rangerx,
Ссыль приведy по3же. Рykоводствyюсь Страyстрyпом. Цитата. Добавлено через 38 минут Подтверждений в стандарте не нашел, но Страуструпу верю.
0
|
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
27.02.2011, 03:10 | 8 |
К сожалению у меня нет возможности сейчас это проверить, поэтому придётся поверить тебе на слово. )
Ну хоть бы на Страуструпа дал ссылку ) Специально открыл только что "Язык программирования C++. Специальное издание" $16.3.3. Доступ к элементам и вижу там то же самое, что сказал я. В любом случае, никакой гарантии, что operator[] осуществит проверку выхода за диапазон нет. "На самом деле стандарт не утверждает..." - это не серъёзно. ))
0
|
В астрале
![]() 8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
27.02.2011, 03:25 | 9 | |||||
rangerx, Ну естесно) Все зависит от реализации. Ссылки на книгу боюсь нету на русском языке еще, а может уже и есть. Программирование принципы и практика использования С++ - страница 698, пункт 19.4.1, подпункт 4.
Про MSVS - такой код в релизе
0
|
В астрале
![]() 8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
27.02.2011, 15:52 | 11 |
outoftime, Вылетит. Очевидно почему. vec[10] читает какую-то другую область памяти.
0
|
║XLR8║
|
|
27.02.2011, 16:19 [ТС] | 12 |
ForEveR, результаты последнего SRM на TopCoder-е, посмотрите пожалуйста, есть солюшены и тесты, на которых я их хотел слить, что касается C# и Java, опять таки, там все слетели, но кто писал на плюсах и ставил в условные операторы, впрочем, смотрите сами.
http://www.topcoder.com/stat?c... 3#defenses http://www.topcoder.com/stat?c... 9#defenses http://www.topcoder.com/stat?c... 9#defenses Что обьеденяет эти коды, если мы подаем вектор {50} с 1 элементом и какая разница с этим http://www.topcoder.com/stat?c... 3#defenses Добавлено через 4 минуты Имеется в виду на вход метода isValid (если вы не знакомы с правилами)
0
|
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
27.02.2011, 19:09 | 13 |
Ну, может быть, не буду спорить. В стандарте скорее всего вообще об этом ничего не говорится.
Если повезёт...
0
|
В астрале
![]() 8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
27.02.2011, 19:11 | 14 |
0
|
║XLR8║
|
||||||
27.02.2011, 19:18 [ТС] | 15 | |||||
Это что получается то? Когда я вижу что-то типа:
0
|
В астрале
![]() 8041 / 4798 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
27.02.2011, 19:20 | 16 |
outoftime, Используй at() и будет тебе счастье.
А лучше итераторы. имхо)
0
|
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
27.02.2011, 19:30 | 17 | |||||
1
|
║XLR8║
|
|
27.02.2011, 19:39 [ТС] | 18 |
0
|
27.02.2011, 19:39 | |
Помогаю со студенческими работами здесь
18
«Языки и технологии программирования» «Операторы цикла. Условные операторы» Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |