Ошибка “vector subscript out of range” в цикле
При компиляции (1) выдает (2). Что делать? Как бороться? 
Отслеживать
15.9k 8 8 золотых знаков 52 52 серебряных знака 100 100 бронзовых знаков
задан 6 мар 2017 в 16:20
Алексей Завальнюк Алексей Завальнюк
11 1 1 золотой знак 1 1 серебряный знак 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Вы не можете применять оператор индексирования к вектору, который еще не имеет элементов.
Поэтому вам следует написать перед циклами
cin >> str; cin >> stb; vect.resize(str, std::vector(stb));
То есть сначала нужно создать элементы вектора, а затем лишь обращаться к ним по индексу.
Отслеживать
ответ дан 6 мар 2017 в 16:46
Vlad from Moscow Vlad from Moscow
44.8k 3 3 золотых знака 38 38 серебряных знаков 89 89 бронзовых знаков
Как вариант инициализации (при создании можешь размерность указать):
int a,b; cin>>a>>b; vector > mas(a,vector(b)); size_t size = mas.size(); for(size_t i = 0; i < size; ++i)< for_each(mas[i].begin(),mas[i].end(),[](int& k)>k;>); >
Отслеживать
ответ дан 7 мар 2017 в 6:42
vados inferno vados inferno
172 13 13 бронзовых знаков
- c++
- visual-c++
- vector
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Vector subscript out of range — Visual C++
bool scanSig(string path, int signCount)
InitConsole();
FILE *in1 = fopen(path.c_str(), «rb»);
if (!in1) cout for (int wsignCount = 0; wsignCount < signCount; wsignCount++)
//Convert string vector to int
istringstream iss(signBase[wsignCount]);
vector results(istream_iterator,
istream_iterator());
reverse(results.begin(), results.end());
vector signInt(results.size());
//cout int resultsSize = results.size();
for (int i = 0; i < results.size(); i++) < stringstream ss; ss > x; signInt[i] = x; > //unsigned char buf[26000]; unsigned char buf[MAX_PATH]; int z = 0; size_t count; //while (count = fread(buf, sizeof(buf[0]), 26000, in1)) < while (count = fread(buf, sizeof(buf[0]), MAX_PATH, in1)) < int i; for (i = 0; i < count; ++i) < if ((int)buf[i] == signInt[0]) < for (z = 1; z < resultsSize; z++) < if (buf[i - z] != signInt[z]) break; >if (z == resultsSize) < detectedSignature = signBase[wsignCount]; detectedPath = path; botFound = true; cout > sleepCount++; if (sleepCount == 3000) < Sleep(6); sleepCount = 0; >> > > fclose(in1); return 0;
подскажите где может быть проблема
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Vector subscript out of range c как исправить
Ошибка — Vector subscript out of range
#include "Bank.h" Bank::Bank() < >Bank::Bank(const std::vector &payers) < for (auto &payer:payers) this->payers.push_back(payer); createHashTable(); > Bank::Bank(Bank &bank) < for (auto &payer:payers) this->payers.push_back(payer); createHashTable(); > Bank::~Bank() <> std::ostream &operator <<(std::ostream &os, const Bank &bank) < for (auto &payer : bank.payers) os << payer << std::endl; return os; >std::istream &operator>>(std::istream &in, Bank &bank) < Payer payer; while (in >> payer) < bank.payers.push_back(payer); >bank.createHashTable(); return in; > std::vector Bank::search(int payerAccount) < return hashTable.hashTable[payerAccount % hashTable.m]; >void Bank::createHashTable() < loop: hashTable.hashTable.clear(); hashTable.hashTable.resize(hashTable.m); for (auto &payer:payers) < int hash = payer.getPayerAccount() % hashTable.m; if (hashTable.hashTable[hash][0].getPayerAccount() != payer.getPayerAccount()) < hashTable.m += hashTable.k * hashTable.k; goto loop; >else < int i = 0; for (; i < hashTable.hashTable[hash].size(); i++) if ((hashTable.hashTable[hash][i]) == payer) break; if (i == hashTable.hashTable[hash].size()) hashTable.hashTable[hash].push_back(payer); >> >
В сам класс я с мейне передаю : fin >> bank;
Пример заполнения файла :
1 2 3
4 5 6
7 8 9
(hashTable.hashTable[hash][0].getPayerAccount() != payer.getPayerAccount()) — На этом моменте выскакивает ошибка : expression vector subscript out of range ( Полный текст ошибки на скриншоте во вложении )
Изображения
| Снимок.PNG (18.5 Кб, 104 просмотров) |
| Ramirez1995 |
| Посмотреть профиль |
| Найти ещё сообщения от Ramirez1995 |
В чем ошибка в программе [векторы]?
Вот тут вы перебираете i от 0 до rast.size() — 1, т.е. вроде бы всё ок, но дальше вы пишите rast[i + 1] и на последней итерации происходит UB, т.е. обращение к ячейке памяти за вектором, это может привести к падению программы, а может и нет. Лучше по началу используйте .at(i), он будет генерить exception при попытке выйти за пределы вектора.
И что вот это else <> ? В данном случае можно просто опустить else
Chipu @Chipu Автор вопроса
Спасибо, но я сейчас понял, что можно просто сортировать вектор и вывести первый и последний элемент
else<>
я специально написал,дабы было видно что там ничего делать не надо)