无法找出错误的来源(调试器说分段错误)

时间:2019-07-02 12:55:16

标签: c++ segmentation-fault

程序正常编译,调试器指向此函数(第三行):

#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 个答案:

答案 0 :(得分:4)

写作时

vector <char> used;

您正在创建一个空向量,因此访问它的任何元素都将调用未定义的行为(程序可能崩溃,继续执行任何操作)。

考虑类似

vector <char> used(2, 0);

在这里创建两个初始化为0的元素。

第二,鉴于C ++具有bool作为类型,您可能要考虑使用vector<bool>。这种类型有问题,但就您而言,似乎很合适,请查看https://isocpp.org/blog/2012/11/on-vectorbool