Boost logo

Boost Users :

Subject: Re: [Boost-users] [graph] Problem with vertex initialization in boost::add_vertex()
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-04-05 09:16:13


On Thu, 5 Apr 2012, Philipp Klaus Krause wrote:

> I have graph as follows:
>
> struct cfg_node
> {
> iCode *ic;
> operand_map_t operands;
> std::set<var_t> alive;
> std::set<var_t> dying;
> };
>
> typedef boost::adjacency_list<boost::vecS, boost::vecS,
> boost::bidirectionalS, cfg_node> cfg_t;
>
> And a fragment of code:
>
> wassertl (!boost::num_vertices(cfg), "CFG non-empty before creation.");
> for (ic = start_ic, i = 0, j = 0; ic; ic = ic->next, i++)
> {
> boost::add_vertex(cfg);
> wassertl (cfg[i].alive.empty(), "Alive set non-empty upon
> creation.");
>
> Nothing inside the loop add or deletes vertices or changes the alive
> members.
>
> The code works fine on Linux, but I got bug reports from Windows users.
> For them the assertion in the loop triggers (and an attempt to insert
> something into alive later segfaults).

Have you tried Valgrind on Linux?

> So I have two questions:
>
> What could be the cause of this problem? Has it been encountered before?

Are you sure ic is initialized correctly (pointing to other vertices in
the graph)? Otherwise, I don't see a reason why your code wouldn't work.

> Is the approach of using cfg[i] to get the vertex still correct? I've
> used this for some time, but I can't find it in current boost documentation.

Yes -- see
<URL:http://www.boost.org/doc/libs/1_49_0/libs/graph/doc/bundles.html>.

-- Jeremiah Willcock


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