Перейти к содержимому

Vector subscript out of range c как исправить

  • автор:

Ошибка “vector subscript out of range” в цикле

код[1]При компиляции (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<>
я специально написал,дабы было видно что там ничего делать не надо)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *