无论何时调用该函数,我都想在2D数组的末尾添加行和列。
template <typename vertex> void directed_graph<vertex>::add_vertex(const vertex& u)
{
if (!directed_graph<vertex>::contains(u))
{
vertices.push_back(u);
for (unsigned i = 0; i < vertices.size()-1; i ++)
{
adj_matrix[i].resize(vertices.size());
adj_matrix[i][vertices.size()-1] = false;
}
adj_matrix.resize(vertices.size());
for (unsigned i = 0; i < vertices.size(); i ++)
{
adj_matrix[vertices.size()-1][i] = false;
}
}
}
我如上所述尝试了此代码,收到的是SegFault。
答案 0 :(得分:0)
您打算在{{1}中的初始n*n
之后,将(n+1)*(n+1)
邻接矩阵增长到n
为vertices.size()-1
的{{1}} }向量。
(几乎)看起来不错:
push_back()
循环会调整vertices
个现有内部向量的大小,事实上会添加缺失的列。 for
循环中,尝试通过直接为其元素分配值来初始化新内部向量。 不幸的是,当您执行此最后一步时,最后一个内部向量仍然为空。因此,您的第二个for循环使用超出范围的下标n
,这会导致UB(可能的症状:seg fault)。
您需要做的就是在第二个循环之前调整最后一个内部向量的大小:
for