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

Why does this code snippet give a 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];
}
vector <vector <int>> graph;
graph [0] = vector <int> ();

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

graph.emplace_back();

您需要从头开始使用 push_back 或调整大小 graph

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

您声明了一个空向量

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];