Не могу понять, откуда исходит ошибка (отладчик говорит об ошибке сегментации) - PullRequest
0 голосов
/ 02 июля 2019

Программа компилируется нормально, отладчик указывает на эту функцию (3-я строка):

#include <cstdlib>
#include <vector>
#include <iterator>

using namespace std;

vector < vector <int> > g = {{0,1,1},
                             {1,0,0},
                             {1,0,0}};
vector < char > used;

void dfs (int v) {
    used[v] = true;
    for (vector<int>::iterator i = g[v].begin(); i!=g[v].end(); i++)
        if (!used[*i])
            dfs (*i);
}

int main(int argc, char** argv) {
    dfs(1);
    return 0;
}

Выход с кодом возврата 1

1 Ответ

4 голосов
/ 02 июля 2019

При написании

vector <char> used;

Вы создаете пустой вектор, поэтому доступ к любому его элементу вызовет неопределенное поведение (программа может аварийно завершить работу, продолжить, сделать что угодно).

Рассмотрим что-то вроде

vector <char> used(2, 0);

Где вы создаете два элемента, инициализированные в 0.

Во-вторых, учитывая, что C ++ имеет bool в качестве типа, вы можете рассмотреть возможность использования vector<bool>. У этого типа есть проблемы, но в вашем случае он выглядит хорошо, пожалуйста, посмотрите на https://isocpp.org/blog/2012/11/on-vectorbool

...