Ошибка утверждения отладки: индекс вектора вне допустимого диапазона - PullRequest
1 голос
/ 03 августа 2020

Получаю предупреждение об ошибке, которое, к сожалению, не понимаю, что это значит. Я попытался найти другие вопросы об ошибках утверждения отладки, но не смог найти ничего, что я понял бы как ту же проблему, что и у меня. В нем конкретно указано Line: 1501 Expression: Vector underscript out of range. Раньше я использовал векторы, и у меня не было проблем, может ли кто-нибудь помочь объяснить, чего мне здесь не хватает?

Спасибо

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {

    vector <int> someVec;
    vector <string> anotherVec;

    someVec.push_back(1);
    someVec.push_back(2);
    someVec.push_back(3);

    cout << "someVec size: " << someVec.size() << endl;

    anotherVec[0] = "Fred";
    anotherVec[1] = "Bob";
    anotherVec[2] = "Holly";

    anotherVec.push_back("John");

    for (int val : someVec)
    {
        cout << val << endl;
    }

    cout << endl;

    for (string name : anotherVec)
    {
        cout << name << endl;
    }

    return 0;
}

1 Ответ

2 голосов
/ 03 августа 2020

Эта строка:

vector <string> anotherVec;

объявляет вектор размера 0. Затем индексация в вектор следующим образом:

anotherVec[0] = "Fred";

вызывает неопределенное поведение. Вместо этого вы можете сделать:

anotherVec.push_back("Fred");

Или же вы можете выделить достаточно места для вектора при его объявлении, например:

vector <string> anotherVec(3);

, а затем вы можете индексировать в вектор с 0, 1 или 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...