删除顶点并再次添加会导致boost::graph中的崩溃?

删除顶点并再次添加会导致boost::graph中的崩溃?,boost,boost-graph,Boost,Boost Graph,我正在使用一个带标签的图形 typedef boost::labeled_graph<boost::adjacency_list<boost::listS, boost::listS, boost::undirectedS, Room, RoomEdge>,std::string> MyGraph; 然后像这样移除它们: // First we remove all edges from this vertex BGL_FORALL_VERTICES(v, g, MyG

我正在使用一个带标签的图形

typedef boost::labeled_graph<boost::adjacency_list<boost::listS, boost::listS, boost::undirectedS, Room, RoomEdge>,std::string> MyGraph;
然后像这样移除它们:

// First we remove all edges from this vertex
BGL_FORALL_VERTICES(v, g, MyGraph){
    if (QString(g.graph()[v].vertex_id.c_str()).compare(roomIdToBeRemoved) == 0){
        ve = v;
        BGL_FORALL_OUTEDGES(v, e, g, MyGraph) {
            ev.push_back(e);
        }
    }
}

foreach(MyEdge e, ev){
    remove_edge(e,g);
}

// Then we remove the vertex itself
remove_vertex(roomIdToBeRemoved.toStdString().c_str(),g);
到目前为止,这似乎是可行的。问题是,如果我想用相同的id再次添加移除的顶点,我会得到以下结果:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
在设置新添加顶点的字段时(上面注释为“此处崩溃”)


原因可能是什么?我正在使用boost函数来删除/添加内容。

崩溃是由
boost::labeled_graph
实现中的错误造成的。它出现在Boost 1.54.0和1.55.0(最新版本)中。我通过Boost的Trac找到了


我设法写了一个简单的测试用例来揭示问题。通过
valgrind
运行它可以证明问题存在。我还创建了一个简单的补丁,修复了我设置的
boost::adjacency_list
(请参阅所有这些文件的错误报告)。

@JeremiahWillcock我已经用相关信息更新了这个问题。您是否尝试过Valgrind或调试器等工具来找出代码试图错误访问的内容?
// First we remove all edges from this vertex
BGL_FORALL_VERTICES(v, g, MyGraph){
    if (QString(g.graph()[v].vertex_id.c_str()).compare(roomIdToBeRemoved) == 0){
        ve = v;
        BGL_FORALL_OUTEDGES(v, e, g, MyGraph) {
            ev.push_back(e);
        }
    }
}

foreach(MyEdge e, ev){
    remove_edge(e,g);
}

// Then we remove the vertex itself
remove_vertex(roomIdToBeRemoved.toStdString().c_str(),g);
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)