如果" no_vertices"的值,我会收到分段错误超过2.代码如下
vector<int> a[no_vertices];
for(int i=1;i<=no_vertices-1;i++)
{
int v1,v2;
cin>>v1>>v2;
a[v1].push_back(v2);
a[v2].push_back(v1);
}
我正在尝试使用邻接列表制作双向图。所以我试图使用一组向量。但是在输入所有值后,即在for循环结束后,我在控制台上出现了分段错误。
答案 0 :(得分:3)
由于输入值用于索引,因此每次迭代它们必须都在0到no_vertices
- 1的范围内。
否则您有未定义的行为。
以这种方式直接使用输入值不是一个好主意。添加验证输入值的逻辑。即,他们处于所需的范围内。
答案 1 :(得分:2)
你需要这样的东西:
vector<vector<int>> a(no_vertices, vector<int>());
for (int i = 0; i < no_vertices; i++)
{
int v1, v2;
cin >> v1 >> v2;
if (v1 < 0 || v1 >= no_vertices || v2 < 0 || v2 >= no_vertices)
{
cout << "incorrect value!" << endl;
continue;
}
a[v1].push_back(v2);
a[v2].push_back(v1);
}
确保您的v1和v2值在范围内:[0, no_vertices - 1]