为什么此代码段会出现分段错误?

时间:2021-05-08 08:49:11

标签: c++ vector segmentation-fault

我不明白为什么这个简单的代码会出现分段错误。

#include <iostream>

using namespace std;

int main ()
{
    vector <vector <int>> graph;
    graph [0] = vector <int> ();
    graph [0].push_back(0);
    cout << graph[0][0];
}

3 个答案:

答案 0 :(得分:1)

vector <vector <int>> graph;
graph [0] = vector <int> ();

因为您正在访问空向量的元素 0。首先,给它一些元素:

graph.emplace_back();

答案 1 :(得分:1)

您需要从一开始就使用 push_back 或调整 graph 的大小:

vector<vector<int>> graph;
graph.resize(1);
graph[0].push_back(0);
cout << graph[0][0];

答案 2 :(得分:1)

你声明了一个空向量

vector <vector <int>> graph;

因此您不能使用下标运算符来更改向量中不存在的元素。

你可以至少用一个元素来声明向量

vector <vector <int>> graph( 1 );

在这种情况下这个声明

graph [0] = vector <int> ();

将被删除,你可以写

graph [0].push_back(0);
cout << graph[0][0];

另一种方法是对初始对象使用另一种方法 push_back

vector <vector <int>> graph;
graph.push_back( {} );
graph [0].push_back(0);
cout << graph[0][0];