Hi, all,
I just found a weird problem about PositionIterator, and I really hope
somebody could help me out.
My example code looks like the following:
Xapian::MSetIterator im;
Xapian::TermIterator it1, it2;
Xapian::PositionIterator ip1_begin, ip1_end, ip2_begin, ip2_end;
ip1_begin = db.positionlist_begin(*im, *it1);
ip1_end = db.positionlist_end(*im, *it1);
ip2_begin = db.positionlist_begin(*im, *it2);
ip2_end = db.positionlist_end(*im, *it2);
for (Xapian::PositionIterator ip1 = ip1_begin; ip1 != ip1_end; ip1++)
{
cout << *ip1 << endl;
for (Xapian::PositionIterator ip2 = ip2_begin; ip2 != ip2_end;
ip2++)
{
cout << *ip2 << endl;
}
}
Suppose PositionIterator ip1 points to [1 3], andPositionIterator ip2 points
to [2 4], then with the above code it will output:
1
2
4
3
random number
random number
random number
random number
...
and finally end up with a segmentation fault. If I remove one layer of the
loop (either remove layer ip1 or ip2), the program always execture
correctly. I wonder what I did wrong?
Thanks.
Kevin