Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Полярный
475 / 447 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
1

Проверка индексов при доступе к вектору через []

22.08.2016, 09:54. Просмотров 857. Ответов 2
Метки нет (Все метки)

При написании кода сталкиваюсь с дилеммой: использовать at или operator [] при работе с std::vector или подобными вещами. Для релиза то явно лучше [], а вот для ловли багов лучше at. Но есть вариант лучше: использовать assert'ы внутри [], которые будут отключаться при релизе. Можно ли включить такой функционал в GCC (MinGW)? И если нет, то может есть другой вариант которого я не вижу?

Добавлено через 6 минут
А все, нашел, надо компилировать с D_GLIBCXX_DEBUG. Выдавалось бы еще место вызова где был выход за рамки, а не просто ошибка, было бы вообще замечательно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2016, 09:54
Ответы с готовыми решениями:

Обращение к вектору полученному через указатель
Всем привет, Появился вопрос по поводу обращения к вектору полученному через указатель....

Ошибки при доступе к компонентам через "->"
btree.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Btree&)’: btree.cpp:63:24:...

Можно ли значение вектора A передать вектору B через swap?
А возможно ли такое сделать через swap: значение вектора A передать вектору B, при этом у вектора...

Сериализация через SaveFileDialog. Ошибка при доступе к файлу
Всем привет, проблема с доступом к файлу: Создаем кнопку сериализации в Windows Form: К...

2
Эксперт С++
8274 / 3850 / 837
Регистрация: 15.11.2014
Сообщений: 8,726
22.08.2016, 10:16 2
Лучший ответ Сообщение было отмечено dimcoder как решение

Решение

Цитата Сообщение от dimcoder Посмотреть сообщение
с дилеммой: использовать at или operator [] при работе с std::vector или подобными вещами. Для релиза то явно лучше [], а вот для ловли багов лучше at.
здесь нет дилемы. используйте []



Цитата Сообщение от dimcoder Посмотреть сообщение
Выдавалось бы еще место вызова где был выход за рамки
1.
запускаемся под отладкой

2.
подрываемся на ассерте.

3.
так как запуск был под отладкой,
то на ассерте срабатывает бряк

4.
смотрим call stack.
видим вызовы всех функций.

5.
и подымаемся по стеку на уровень выше
и видим код вызова оператор[].

6.
PROFIT!!!!????
1
Полярный
475 / 447 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
22.08.2016, 13:03  [ТС] 3
Цитата Сообщение от hoggy Посмотреть сообщение
смотрим call stack.
видим вызовы всех функций.
Да, это мне и надо видимо. Вот и дебаггер придется осваивать какой-то. Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2016, 13:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

При попытке включить службы через просмотр локальных служб пишет отказано в доступе
Помогите пожалуйста у меня с ноутбуком такя проблема: с последнего включения выключились службы...

"Отказано в доступе" при попытке получить температуру процессора через WMI
Здравствуйте. Пытаюсь получить температуру процессора, а мне выбивает исключение. ...

Как создать коммутируемое интернет соединение в Windows при доступе в интернет через роутер?
Всем привет! Значится т-а-а-а-ак... Такая ситуация: инет получаю от ADSL-модема, настроенного в...

Уравнение плоскости, проходящей через 2 точки параллельно вектору
Собственно сабж. Я знаю, что решается через матрицу для плоскости через 3 точки, подставляя в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.