为什么此代码片段会出现分段错误?
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];
我无法理解为什么这个简单的代码会出现分段错误。
#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];