【发布时间】:2019-09-14 04:09:08
【问题描述】:
想用邻接列表构造一个 Graph,但是当我向 vector<vector<int>> 添加元素时出现 seg-fault。 adj.size() 打印 5 告诉它已分配内存,为什么 addEdge() 方法中的 seg-fault?
#define V 5
struct Edge {
int src, dst;
};
void addEdge(vector<vector<int>> &adj, int u, int v)
{
adj[u].push_back(v);
}
void constructGraph(vector<vector<int>> &adj, vector<Edge> &edges)
{
for(Edge e : edges)
{
addEdge(adj, e.src, e.dst);
}
}
int main()
{
vector<vector<int>> adj(V);
vector<Edge> edges =
{
{ 0, 1 }, { 1, 2 }, { 2, 0 }, { 2, 1 },
{ 3, 2 }, { 4, 5 }, { 5, 4 }
};
constructGraph(adj, edges);
return 0;
}
【问题讨论】:
-
5 超出了大小为 5 的向量的范围。我认为您的意思是
#define V 6? -
如果你使用过
.at(),它会告诉你类似terminate called after throwing an instance of 'std::out_of_range' -
@Andreas DM 是的,刚刚了解到使用 .at() 总是更安全,建议使用 [ ],我的 c 程序员必须努力学习。
标签: c++ vector segmentation-fault push-back