After I found a mistake from my side and deleted the question, I decided to undelete and partially answer it. I am sure somebody else can benefit from this stupid mistake (when you have a deadline in 3 hours you do make mistakes).
I knew it was something obvious: actually the code which I wrote as:
cCOLLECT_STR_TOP_NODES_HELPER helper( searchStr, attribute, this );
pHelper = &helper;
in reality was:
{
cCOLLECT_STR_TOP_NODES_HELPER helper( searchStr, attribute, this );
pHelper = &helper;
}
so helper went out of scope...
The problem is, I did debugging. pHelper was pointing to something meaningful, at least that's what it looked like. I am still not sure how exactly the crash happened, but the reason is clear. When the pointed object went out of scope, it is probably UB. Still, if somebody describes what internally happened, I'll accept the answer.