libstdc++/1853: <deque> deallocates unowned memory within .pop_back()
Wed Jan 2 21:00:00 GMT 2002

Synopsis: <deque> deallocates unowned memory within .pop_back()

State-Changed-From-To: analyzed->closed
State-Changed-By: pme
State-Changed-When: Wed Jan  2 21:00:36 2002
    Like jdennett says, this is undefined behavior.  To be
    strictly portable and correct, users should check for
    !x.empty() before removing elements from a container x.
    By default we shouldn't do sanity checking, I believe.
    The overhead imposed could be significant when pop_back
    is being called in a loop (which is what a double-ended
    queue could easily be used for).  The same holds for other
    functions which behave badly when invoked in undefined
    situations.  The penalty would be imposed for users which
    are correctly checking for empty containers, and would
    then be redundant.
    For 3.2 I hope to add some kind of super-safe debugging
    mode to the library.  Speed and efficiency would go
    down the toilet, but we could catch cases like these.
    The guiding documentation for users would be:  if your
    code works with this mode on, and it breaks without it,
    then you're doing something undefined.

More information about the Gcc-bugs mailing list