Vector subscript out of range c как исправить
Перейти к содержимому

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

  • автор:

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»

Доброго времени суток,форумчане!При запуске выскакивает ошибка из заголовка. Не понимаю,как исправить.
Сам код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#include #include #include using namespace std; int main() { int SIZE, i = 0, a = 0, sum = 0, im = 0, jm = 0, sort; setlocale(LC_ALL, "ru"); srand(time(NULL)); cout  "Введите размер вектора: "  endl; cin >> SIZE; vector int> myVector(SIZE); for (i = 0; i  SIZE; i++) { myVector[i] = -999 + rand() % 1000; cout  myVector[i]  endl; } for (auto elem : myVector) { if (elem  0) { sum += elem; } ++i; } cout  "1. Сумма отрицательных чисел = "  sum  endl; int proizvedenie = 0; int max = myVector[0]; int min = myVector[0]; for (auto elem : myVector) { if (elem > max) { max = elem; im = myVector[i]; } if (elem  min) { min = elem; jm = myVector[i]; } } if (im  jm) { for (int i = jm; i  im; i++) { proizvedenie *= myVector[i]; } } else if (jm > im) { for (int i = jm; i  im; i++) { proizvedenie *= myVector[i]; } } cout  "2. Произведение элементов, расположенных между максимальным и минимальным элементами = "  proizvedenie  endl; for (int i = 0; i  SIZE; i++) { if (myVector[i] > myVector[i + 1]) { sort = myVector[i]; myVector[i] = myVector[i + 1]; myVector[i + 1] = a; } } for (int i = 0; i  SIZE; i++) { cout  "Отсортированный массив : "  endl  myVector[i]  endl; } }

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Ошибка: Vector subscript out of range
Доброго времени суток! Переписывал задачу с джавы на плюсы, но столкнулся с некоторыми непонятными.

Ошибка vector subscript out of range
Есть структура данных бор. Написана библиотека: #include "pch.h" #include <iostream> #include.

Ошибка: Vector subscript out of range
Всю голову сломал, не вижу где ошибка. Выводит только первые 5 итераций, вместо 45. int.

Ошибка vector subscript out of range
Пишет "vector subscript out of range" Смысл этой задачи найти число с максимальной суммой.

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

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

код[1]При компиляции (1) выдает (2). Что делать? Как бороться?

Отслеживать
15.9k 8 8 золотых знаков 52 52 серебряных знака 99 99 бронзовых знаков
задан 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.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

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