Boost logo

Boost Users :

Subject: Re: [Boost-users] [BGL] iterator/descriptor invalidation
From: Dmitry Bufistov (dmitry_at_[hidden])
Date: 2008-12-10 07:35:36


Julius Ziegler escribió:
> Dmitry Bufistov <dmitry <at> lsi.upc.edu> writes:
>
>>> It strikes to me now that the matter is not so subtle at all, since
>>> add_vertex()
>>> with vecS is very likely to invalidate vertex_iterators (clearly contrary to
>>> the
>>> documentation). In my case the issue was a bit obscured since it is not
>>> perfectly clear that source(edge_descriptor) and target(edge_descriptor) use
>>> vertex_iterators. I had expected that edge_descriptor stores two
>>> vertex_descriptors.
>> The problem is not with edge_descriptor it is in the operator++() of the
>> edge_iterator class.
>
> I think that edge_iterators are not directly affected, and its still save to
> use them to access, e.g., edge properties. Its also save to use operator++().
> The problem is that calling source(...) on an edge descriptor dereferences a
> vertex_iterator, and THAT one may have been invalidated. Is that right?

Well, you can try to remove source() and target() calls from your
example and to see if the problem is still reproducible.

Regards,
Dmitry


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net