Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
1

Исправление ошибки

28.01.2014, 17:01. Показов 736. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, ув. форумчане! Помогите, пожалуйста, исправить ошибку. Не пойму в чём проблема.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::vector <unsigned char> converter ( std::string& str)
{
    std::vector <unsigned char> result_hex;
    std::vector <unsigned char> result_base;
    result_hex.reserve(str.size()/2);
    result_base.resize(str.size());
    for (int i = 0; i < str.size()/2; ++i)
        result_hex.push_back(((string_to_hex(str[2*i])) << 4) | (string_to_hex(str[2*i + 1])));
 
 
    for (int i = 0; i < result_base.size() - 4; ++i)
    {
        if ((2*i + 3) >= str.size()/2)
        convertToBase64(result_hex[2*i], result_hex[2*i+1], result_hex[2*i+2], result_base[2*i], result_base[2*i+1], result_base[2*i+2], result_base[2*i+3] );
        else break;
    }
    return result_base;
}
Ругается на строку
C++
1
convertToBase64(result_hex[2*i], result_hex[2*i+1], result_hex[2*i+2], result_base[2*i], result_base[2*i+1], result_base[2*i+2], result_base[2*i+3] );
мол вектор вне своих пределов.
Но, вроде, все условия проверяют и не должны позволить циклу зайти вне вектора.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2014, 17:01
Ответы с готовыми решениями:

исправление ошибки
задание:напишите программу, которая считывает строку символов, выбирает числа из этой строки и...

Исправление ошибки
Как сделать в else чтобы число n генерировалось заново,если числа n и m не простые? #include...

Исправление ошибки
Здравствуйте. Не могу понять, в чем заключается ошибка кода и как ее решить. Помогите, пожалуйста. ...

исправление ошибки
Народ как исправить эту ошибку #include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; using...

17
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
28.01.2014, 17:23 2
Чушь сморожу возможно но, у тебя result_hex.reserve(str.size()/2) в два раза меньше result_base.resize(str.size()). А теперь смотри последний цикл если ((2*i + 3) = str.size()/2) то (2*i + 3) больше раз мера вектора result_hex, а следовательно если ((2*i + 3) = str.size()/2 + 2) result_hex[2*i+1] становится за пределами
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
28.01.2014, 17:54 3
Цитата Сообщение от Тамика Посмотреть сообщение
C++
1
if ((2*i + 3) >= str.size()/2)
а если равно, это разве не за пределами вектора ?)
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
28.01.2014, 17:58 4
Цитата Сообщение от aLarman Посмотреть сообщение
а если равно, это разве не за пределами вектора ?)
Я тоже на это чуть не попался: (2*i + 3) то вызов то result_hex[2*i+2] с учетом что нумерация с 0, как раз в роде на последнюю указывает
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
28.01.2014, 17:58  [ТС] 5
Цитата Сообщение от aLarman Посмотреть сообщение
а если равно, это разве не за пределами вектора ?)
Не-а. У меня половинный размер строки равен 3 как раз.)
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
28.01.2014, 18:01 6
C++
1
if (2*(i + 1) < str.size()/2)
может так?
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
28.01.2014, 18:02  [ТС] 7
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
if (2*(i + 1) < str.size()/2)
может так?
Не уверена... Мне нужны каждые четыре элемента. Там, кстати, ошибка... Вместо 2*i везде должно быть 4*i.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
28.01.2014, 18:04 8
Должно еще к тому же выполняться условие кажется: 2*(result_base.size() - 4-1)+3<result_base.size(), т.е. result_base.size()<7;
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
28.01.2014, 18:05 9
максимальный индекс у Вас 2*i+2
C++
1
result_hex[2*i+2]
поэтому это число должно быть меньше размера result_hex строго меньше, тогда не будет выхода за пределы вектора

Добавлено через 50 секунд
Цитата Сообщение от Тамика Посмотреть сообщение
Не уверенна...
не уверены или не правильно ?
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
28.01.2014, 18:08  [ТС] 10
Цитата Сообщение от aLarman Посмотреть сообщение
максимальный индекс у Вас 2*i+2
C++
1
result_hex[2*i+2]
поэтому это число должно быть меньше размера result_hex строго меньше, тогда не будет выхода за пределы вектора

Добавлено через 50 секунд

не уверены или не правильно ?
Дошло о чём Вы. Не обратила внимание, что Вы убрали равно в условии.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
28.01.2014, 18:09 11
Цитата Сообщение от aLarman Посмотреть сообщение
максимальный индекс у Вас 2*i+2
Код C++
1
result_hex[2*i+2]
поэтому это число должно быть меньше размера result_hex строго меньше, тогда не будет выхода за пределы вектора
Об этом я и говорю.
1
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
28.01.2014, 18:11 12
mustimur, дело говорит
чтобы не выйти за пределы result_base думаю надо так...раз у Вас максимальный индекс для этого вектора 2*i+3
C++
1
for (int i = 0; 2*i < result_base.size()-3; ++i)
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
28.01.2014, 18:13  [ТС] 13
Ну да, тут поняла.)
Только объясните, пожалуйста - почему выражение
C++
1
if (result_hex[2*(i+1)] > str.size()/2)
лучше, чем проверка моя
C++
1
if (result_hex[2*i+1)] >= str.size()/2)
?
Никаких упреков, мне правда интересно.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
28.01.2014, 18:15 14
Цитата Сообщение от Тамика Посмотреть сообщение
Никаких упреков, мне правда интересно
Ваши 2 строчки различаются только знаком, в одном случае строго в другом строго или равно, Вам предложили другую проверку вообще то другую , то что проверяете Вы не поможет не залезть за пределы вектора

Добавлено через 39 секунд

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
не поможет не залезть за пределы
что то я перегнул

1
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
28.01.2014, 18:19 15
Цитата Сообщение от Тамика Посмотреть сообщение
Только объясните, пожалуйста - почему выражение
Код C++
1
if (result_hex[2*(i+1)] > str.size()/2)
лучше, чем проверка моя
Код C++
1
if (result_hex[2*i+1)] >= str.size()/2)
?
так мне тут кажется или условия поменялись? В роде было if (2*(i + 1) < str.size()/2)
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
28.01.2014, 18:23  [ТС] 16
Цитата Сообщение от mustimur Посмотреть сообщение
так мне тут кажется или условия поменялись? В роде было if (2*(i + 1) < str.size()/2)
Ой, да. Это я случайно.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
28.01.2014, 18:31 17
Цитата Сообщение от Тамика Посмотреть сообщение
Ой, да. Это я случайно.
Быват сам этим грешу
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
28.01.2014, 18:32  [ТС] 18
Цитата Сообщение от mustimur Посмотреть сообщение
Быват сам этим грешу
Все мы таким грешим


Решила проблему другим путём таки, но всем спасибо, что помогли!
0
28.01.2014, 18:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2014, 18:32
Помогаю со студенческими работами здесь

Исправление ошибки в программе
Задача напечатать таблицу значений в виде |N | x | S(x) | F(x) | Х изменяется в диапазоне от a...

Исправление ошибки в коде
Всем доброе утро!!!Вот тут задачка запускается , вроде все по примеру делал ,все равно не хочет...

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

Исправление ошибки в реализации очереди
Добрый день. В лабораторной работе поставили задачу создать очередь, которая должна представляться...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru