[xpressive] crash again :(
Well, sorry I did not check mails before. Actually, I should have thought
about it, that token_iterator applies a transformation on each iteration.
Many thanks. It was already late in the night, when I faced this. Sorry for
disturbing your sister's wedding. Hope you will enjoy it! Best wishes to
your sister and her husband!
With Kind Regards,
Ovanes
On 10/18/07, Eric Niebler
Eric Niebler wrote:
Eric Niebler wrote:
Ovanes Markarian wrote:
Hello Eric,
sorry for bothering. I use xpressive in the following context: <snip>
I can't get your code to compile. Please send a minimal and complete source file that demonstrates the problem.
After fiddling with your code a bit, I got it to compile, but I'm not seeing any assertions, exceptions or crashes. What version are you using?
Me again. I realized I wasn't seeing the problem because I hadn't put any strings in the vector over which you were iterating. When I do, I can reproduce the assert. This is not a bug in xpressive, it is a bug in your code. The problem is here:
std::tr1::bind(&apply_regex, sem_separated, td::tr1::placeholders::_1)
In this call to bind, you pass sem_separated to bind() *by value*. You return a regex_token_iterator, which holds a reference to the (temporary) regex object. When the temporary regex object goes away, the regex_token_iterators are left holding dangling references.
The lifetime of a regex_token_iterator cannot exceed the lifetime of the regex it holds.
If you change the code to ...
std::tr1::bind(&apply_regex, std::tr1::ref(sem_separated), td::tr1::placeholders::_1)
... it works just fine.
HTH,
-- Eric Niebler Boost Consulting www.boost-consulting.com _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (1)
-
Ovanes Markarian