[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] set's erase() and iterators

From: Markus Schiltknecht
Subject: [Monotone-devel] set's erase() and iterators
Date: Tue, 16 Oct 2007 21:33:56 +0200
User-agent: Icedove (X11/20070328)

Hello Will,

on my box, monotone's suspend test reproducibly failed. Today I've tracked down the bug, which took me quite some time.

When erasing from a set<>, most iterators remain valid, except the one you've just erased (of course!). But that in turn means, that the following code in could lead to a segmentation fault (probably also dependent on the STL implementation):

  for(std::set<revision_id>::iterator it = branch.second.begin();
      it != branch.second.end(); ++it)
    if (some_decision_func(...))

It's one of the less obvious things in the STL, and about everybody has stumbled over it before, at least I did already several times ;-)

One option to circumvent that problem is recreating the set, as I did for now. Another option might be using the STL algorithm remove_if().



reply via email to

[Prev in Thread] Current Thread [Next in Thread]