Hello all,

When I remove a vertex from a graph, I occasionally experience a crash (on a 
system running Red Hat Enterprise Linux 8.5). I have been able to replicate the 
behavior with the following test program:

#include <boost/graph/adjacency_list.hpp>


int main()
{
    using MyGraph = boost::adjacency_list<boost::setS, boost::vecS, 
boost::undirectedS>;
    using MyVertexDescriptor = boost::graph_traits<MyGraph>::vertex_descriptor;
    using MyVertexDescriptorVec = std::vector<MyVertexDescriptor>;

    MyGraph g;
    MyVertexDescriptorVec vertices{ boost::add_vertex( g ),
                                    boost::add_vertex( g ),
                                    boost::add_vertex( g ) };

    boost::add_edge( vertices[0], vertices[1], g );
    boost::add_edge( vertices[1], vertices[2], g );


    boost::clear_vertex( vertices[0], g );
    boost::remove_vertex( vertices[0], g );


    return 0;
}

Also on a Windows platform, I observe similar behavior. When I build the above 
code with Microsoft Visual Studio 2019 (MSVC 14.27.29110) and run it with a 
debugger, a debug assertion is triggered ("cannot increment value-initialized 
map/set iterator"). In both cases (on Linux and Windows platforms), the 
debugger reveals that the problem is at line 2071 of 
boost/graph/detail/adjacency_list.hpp. For clarity, I have copied the involved 
template function below:

template < class EdgeList, class vertex_descriptor >
inline void reindex_edge_list(
    EdgeList& el, vertex_descriptor u, boost::disallow_parallel_edge_tag)
{
    for (typename EdgeList::iterator ei = el.begin(); ei != el.end(); ++ei) // 
line 2071: increment operator fails
    {
        if (ei->get_target() > u)
        {
            typename EdgeList::value_type ce = *ei;
            el.erase(ce);
            --ce.get_target();
            el.insert(ce);
        }
    }
}

While I was searching for a proper place to post my question, I found the 
following issue at GitHub (which was opened on July 1 of this year): 
https://github.com/boostorg/graph/issues/268. This appears to be the exact same 
issue. So last week, I added a comment saying that I am facing the exact same 
problem. Unfortunately, so far no one has responded yet. To me, it seems that 
the problem is well-understood. Also, some have proposed a bug fix to resolve 
the issue (including a pull request). Nevertheless, no progress has been made 
over the past months. So I was just wondering what is the best way to proceed 
if we want to fix the issue in Boost itself? Is there anything that I can do 
(apart from starting this thread) to help in resolving the issue? Any feedback 
is greatly appreciated.

Kind regards,
Anne van de Graaf
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to