std::list使用std::set_union 进行求并集,编译运行后得到的结果是 std::list::size()值很大

#include
#include
#include

void dump_char_list(const std::list &char_list)
{
std::list::const_iterator it;
for (it = char_list.cbegin(); it != char_list.cend(); ++it)
{
std::cout << **it << " ";
}
std::cout << "\n";
}

int main()
{
char i = 'a';
std::list char_list;
std::list char_sub_list;

for (i='a'; i<='z';++i)
{
    char_list.push_back(new char(i));
}
dump_char_list(char_list);

{ 
    //先排序
    char_list.sort();
    std::list<char*>::iterator sub1_begin = char_list.begin();
    std::list<char*>::iterator sub1_end   = char_list.begin();
    std::list<char*>::iterator sub2_begin = char_list.begin();
    std::list<char*>::iterator sub2_end   = char_list.begin();
    std::list<char*>::iterator result     = char_sub_list.begin();

    std::advance(sub1_end, 5);
    std::advance(sub2_begin, 10);
    std::advance(sub2_end, 15);

    std::cout << distance(char_list.begin(), sub1_begin) << std::endl;
    std::cout << distance(char_list.begin(), sub1_end) << std::endl;
    std::cout << distance(char_list.begin(), sub2_begin) << std::endl;
    std::cout << distance(char_list.begin(), sub2_end) << std::endl;

    std::cout << **sub1_begin << std::endl;
    std::cout << **sub1_end   << std::endl;
    std::cout << **sub2_begin << std::endl;
    std::cout << **sub2_end   << std::endl;

    char_sub_list.resize(100);
    std::cout << char_sub_list.size() << std::endl;

    std::list<char*>::iterator it = set_union(sub1_begin, sub1_end, sub2_begin, sub2_end, result);

    std::cout << char_sub_list.size() << std::endl;
    std::cout << distance(result, it) << std::endl;

    char_sub_list.resize(distance(result, it));
    std::cout << char_sub_list.size() << std::endl;

    dump_char_list(char_sub_list);
}

}


运行后结果:
a b c d e f g h i j k l m n o p q r s t u v w x y z
0
5
10
15
a
f
k
p
100
93940325363312
10
93940325363222
段错误 (核心已转储)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^