Boost logo

Boost Users :

From: Bronek Kozicki (brok_at_[hidden])
Date: 2004-02-22 07:23:34


On Sat, 21 Feb 2004 09:10:43 -0000, Keith MacDonald wrote:
> MyTokenizer token(string_t(_T("abacadaeafag")), sep);

if you take a look into tokenizer constructor

    template <typename Container>
    tokenizer(const Container& c,const TokenizerFunc& f)
      : first_(c.begin()), last_(c.end()), f_(f) { }
    
you will notice that it's not storing copy of its string argument;
instead it stores only its begin and end iterator. When string variable
is destroyed (and in your example it's temporary variable; thus its
destroyed at the end of expression) these iterators are no longer valid.
Problem you are experiencing here is unusual manifestation of undefined
behaviour - you are working in invalid interators. I think that program
crash would be better indicatation that you have serious problem, but
undefined behaviour may manifest in any other way - this time it's just
as if tokenizer is empty. Of course, slight change of program or
compilation options may result in crash (or anything else), until you
remove undefined behaviour:

> string_t s(_T("abacadaeafag"));
> MyTokenizer token(s, sep);

B.


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