Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
#1

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

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

Добрый день, ув. форумчане! Помогите, пожалуйста, исправить ошибку. Не пойму в чём проблема.
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] );
мол вектор вне своих пределов.
Но, вроде, все условия проверяют и не должны позволить циклу зайти вне вектора.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 17:01     Исправление ошибки
Посмотрите здесь:

Исправление ошибки - C++
Как сделать в else чтобы число n генерировалось заново,если числа n и m не простые? #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

Исправление ошибки - C++
Здравствуйте. Не могу понять, в чем заключается ошибка кода и как ее решить. Помогите, пожалуйста. float d = 4.4; //значение первой...

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

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

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

Исправление ошибки в коде - C++
Всем доброе утро!!!Вот тут задачка запускается , вроде все по примеру делал ,все равно не хочет работать((. Вот сама задачка: # include...

Исправление ошибки в работе со строками - C++
Каждый раз в моём коде со строками выдает эту ошибку. Иногда, если проигнорировать её, всё запустится, а иногда - нет. В чём проблема? ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 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] становится за пределами
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.01.2014, 17:54     Исправление ошибки #3
Цитата Сообщение от Тамика Посмотреть сообщение
C++
1
if ((2*i + 3) >= str.size()/2)
а если равно, это разве не за пределами вектора ?)
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
28.01.2014, 17:58     Исправление ошибки #4
Цитата Сообщение от aLarman Посмотреть сообщение
а если равно, это разве не за пределами вектора ?)
Я тоже на это чуть не попался: (2*i + 3) то вызов то result_hex[2*i+2] с учетом что нумерация с 0, как раз в роде на последнюю указывает
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
28.01.2014, 17:58  [ТС]     Исправление ошибки #5
Цитата Сообщение от aLarman Посмотреть сообщение
а если равно, это разве не за пределами вектора ?)
Не-а. У меня половинный размер строки равен 3 как раз.)
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.01.2014, 18:01     Исправление ошибки #6
C++
1
if (2*(i + 1) < str.size()/2)
может так?
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
28.01.2014, 18:02  [ТС]     Исправление ошибки #7
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
if (2*(i + 1) < str.size()/2)
может так?
Не уверена... Мне нужны каждые четыре элемента. Там, кстати, ошибка... Вместо 2*i везде должно быть 4*i.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
28.01.2014, 18:04     Исправление ошибки #8
Должно еще к тому же выполняться условие кажется: 2*(result_base.size() - 4-1)+3<result_base.size(), т.е. result_base.size()<7;
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.01.2014, 18:05     Исправление ошибки #9
максимальный индекс у Вас 2*i+2
C++
1
result_hex[2*i+2]
поэтому это число должно быть меньше размера result_hex строго меньше, тогда не будет выхода за пределы вектора

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

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

не уверены или не правильно ?
Дошло о чём Вы. Не обратила внимание, что Вы убрали равно в условии.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
28.01.2014, 18:09     Исправление ошибки #11
Цитата Сообщение от aLarman Посмотреть сообщение
максимальный индекс у Вас 2*i+2
Код C++
1
result_hex[2*i+2]
поэтому это число должно быть меньше размера result_hex строго меньше, тогда не будет выхода за пределы вектора
Об этом я и говорю.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
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)
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
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)
?
Никаких упреков, мне правда интересно.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.01.2014, 18:15     Исправление ошибки #14
Цитата Сообщение от Тамика Посмотреть сообщение
Никаких упреков, мне правда интересно
Ваши 2 строчки различаются только знаком, в одном случае строго в другом строго или равно, Вам предложили другую проверку вообще то другую , то что проверяете Вы не поможет не залезть за пределы вектора

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 18:19     Исправление ошибки
Еще ссылки по теме:

Исправление ошибки в работе со строками - C++
Пожалуйста, подправьте программу. На borland 5 версии все работает ок. начал переписывать на Borland 3.1 пошли ошибка. Исправлял не знаю...

Исправление ошибки третьего аргумента в вызове функции - C++
Вопрос: что у меня в коде не правильно, что ругается на третий аргумент в вызове функции? Вот код: #include &lt;iostream&gt; #include...

Исправление ошибки в коде. Определение процентного соотношения - C++
Добрый вечер) Я написала программу, но вместо вычисляемых результатов она выдаёт 0. Помогите пожалуйста Текст задания: Train: Пункт...

решение задачи (сумма ряда). исправление ошибки - C++
вот пример для вычисления Fn(x)= \frac{{x}^{n}}{1+{x}^{n}} и вот что я наколдовал #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Исправление - C++
Написал данную программу #include &lt;iostream&gt; using namespace std; int main() { int x,center; cout&lt;&lt;&quot;Enter number...


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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 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)
Yandex
Объявления
28.01.2014, 18:19     Исправление ошибки
Ответ Создать тему
Опции темы

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