首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

往vector里assign一个set,为啥会段异常

2013-11-05 
往vector里assign一个set,为啥会段错误?// all_kmer是一个vectoruint64_t的成员变量// all_kmer_set是一

往vector里assign一个set,为啥会段错误?


// all_kmer是一个vector<uint64_t>的成员变量
// all_kmer_set是一个set<uint64_t>的栈上变量
// 这里是在一个对象的方法里:
all_kmer.assign(all_kmer_set.begin(), all_kmer_set.end());
// 然后就死掉了:

函数调用堆栈如下,我看不出来问题。vector的assign应当是不容易出错误的啊

#0  0x00007ffff6b68af3 in std::_Rb_tree_increment(std::_Rb_tree_node_base const*) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1  0x000000000049a2e5 in std::_Rb_tree_const_iterator<unsigned long>::operator++ (this=0x7ffff3b81b80)
    at /usr/include/c++/4.8/bits/stl_tree.h:270
#2  0x00000000004999e0 in std::__distance<std::_Rb_tree_const_iterator<unsigned long> > (__first=..., __last=...)
    at /usr/include/c++/4.8/bits/stl_iterator_base_funcs.h:82
#3  0x0000000000498de6 in std::distance<std::_Rb_tree_const_iterator<unsigned long> > (__first=..., __last=...)
    at /usr/include/c++/4.8/bits/stl_iterator_base_funcs.h:118
#4  0x00000000004981c7 in std::vector<unsigned long, std::allocator<unsigned long> >::_M_assign_aux<std::_Rb_tree_const_iterator<unsigned long> > (this=0x7fffe7ffdbe8, __first=..., __last=...) at /usr/include/c++/4.8/bits/vector.tcc:262
#5  0x0000000000497775 in std::vector<unsigned long, std::allocator<unsigned long> >::_M_assign_dispatch<std::_Rb_tree_const_iterator<unsigned long> > (this=0x7fffe7ffdbe8, __first=..., __last=...) at /usr/include/c++/4.8/bits/stl_vector.h:1250
#6  0x0000000000496bef in std::vector<unsigned long, std::allocator<unsigned long> >::assign<std::_Rb_tree_const_iterator<unsigned long> > (this=0x7fffe7ffdbe8, __first=..., __last=...) at /usr/include/c++/4.8/bits/stl_vector.h:507
#7  0x0000000000495d4f in schizo::KmerProfile::set_seq (this=0x7fffe7ffdb90, seq=..., j=199, kmer_size=5)
    at /home/yangxi/projects/SchizoHit/src/schizo/KmerProfile.cpp:135
#8  0x0000000000488ebe in schizo::ProfileThreadWorker::operator() (this=0x6effb0)
    at /home/yangxi/projects/SchizoHit/src/schizo/ProfileThreadGroup.cpp:29
#9  0x0000000000490069 in boost::detail::thread_data<boost::reference_wrapper<schizo::ProfileThreadWorker> >::run (this=0x6f0040)
    at /usr/include/boost/thread/detail/thread.hpp:137
#10 0x00007ffff76aa29a in ?? () from /usr/lib/libboost_thread.so.1.54.0
#11 0x00007ffff6dfee0e in start_thread (arg=0x7ffff3b82700) at pthread_create.c:311
#12 0x00007ffff631c9ed in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113


[解决办法]
    typedef std::set<int> Set;
    Set Int_set;
    Int_set.insert(1);
    Int_set.insert(2);
    Int_set.insert(4);
    Int_set.insert(3);

    typedef std::vector<int> Vector;
    Vector Int_vector;
    Int_vector.assign(Int_set.begin(), Int_set.end());
    std::copy(Int_vector.begin(), Int_vector.end(), std::ostream_iterator<int>(std::cout, " ") );
    std::cout<<std::endl;


例子!你自己对着看下!

热点排行