Вылезает ошибка при обращении к vector вне main

148
28 июля 2019, 09:40

Вот код:

#inclue <iostream>
using namespace std;
vector< vector<int> > g;
vector<char> used;
void dfs(int v)
{
    used[v] = true;
    for(int i = 0; i < g[v].size(); i++)
    {
        if(!used[g[v][i]]) dfs[g[v][i]];
    }
}

int main()
{
    int n, k;
    cin >> n >> k;
    g.reserve(n);
    used.reserve(n);
    for(int i = 0; i < n; i++)
    {
        g[i].reserve(n);
        for(int j = 0; j < n; j++)
        {
            int v;
            cin >> v;
            g[i].push_back(v);//ошибка вылазит тут
        }
    }
    dfs(k-1);
    int c = 0;
    for(int i = 0; i < n; i++)
    {
        if(used[i]) c++;
    }
    return 0;
}

текст ошибки:

Process returned -1073741819 (0xC0000005)
Answer 1

Очевидный вылет за пределы вектора g. Ваш вектор g имеет размер 0, а вы смело лезете в g[i].

Количество доступных элементов вектора задается методом resize, а не методом reserve.

См. также Для чего нужен reserve() в C++?

READ ALSO
extern Template from function in Class

extern Template from function in Class

Пробую унести из декларации класса Template в реализацию, все попытки приводят к ругани компилятора, не совсем понимаю как работает в этом случае...

144
Обнуление массива в Си

Обнуление массива в Си

Как правильно обнулить массив? Речь о любых типах массива, будь то символьный, целочисленный, динамический и тп Если способов несколько то желательно...

203
Символьный массив и перевод из двоичной системы в 10-ую [закрыт]

Символьный массив и перевод из двоичной системы в 10-ую [закрыт]

Есть символьный массив, в которые вводятся числа 0 и 1Нужно с помощью функции перевести элементы символьного массива из двоичной системы...

135