vector sort 段错误。

来源:互联网 发布:java初学者论坛 编辑:程序博客网 时间:2024/06/05 20:27
Program received signal SIGSEGV, Segmentation fault.
0xf74a448c in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/libstdc++.so.6
(gdb) bt
#0  0xf74a448c in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/libstdc++.so.6
#1  0xf74a4565 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/libstdc++.so.6
#2  0xf3b16bcc in follow_jce_def::jceFollowNodeInfo::operator= (this=0x9daeb30)
    at /data/hadesmo/livesvn/app/spp_follow/comm/jce_protocol/include/follow_jce_def.h:457
#3  0xf3b17d7e in std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator<follow_jce_def::jceFollowNodeInfo*, std::vector<follow_jce_def::jceFollowNodeInfo, std::allocator<follow_jce_def::jceFollowNodeInfo> > >, follow_jce_def::jceFollowNodeInfo, bool (*)(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)> (__last=..., __val=..., 
    __comp=0xf3adcdf4 <followCmp(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)>)
    at /usr/include/c++/4.1.2/bits/stl_algo.h:2253
#4  0xf3b17e33 in std::__unguarded_insertion_sort<__gnu_cxx::__normal_iterator<follow_jce_def::jceFollowNodeInfo*, std::vector<follow_jce_def::jceFollowNodeInfo, std::allocator<follow_jce_def::jceFollowNodeInfo> > >, bool (*)(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)> (__first=..., __last=..., 
    __comp=0xf3adcdf4 <followCmp(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)>)
    at /usr/include/c++/4.1.2/bits/stl_algo.h:2344
#5  0xf3b18154 in std::__final_insertion_sort<__gnu_cxx::__normal_iterator<follow_jce_def::jceFollowNodeInfo*, std::vector<follow_jce_def::jceFollowNodeInfo, std::allocator<follow_jce_def::jceFollowNodeInfo> > >, bool (*)(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)> (__first=..., __last=..., 
    __comp=0xf3adcdf4 <followCmp(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)>)
    at /usr/include/c++/4.1.2/bits/stl_algo.h:2379
#6  0xf3b181ef in std::sort<__gnu_cxx::__normal_iterator<follow_jce_def::jceFollowNodeInfo*, std::vector<follow_jce_def::jceFollowNodeInfo, std::allocator<follow_jce_def::jceFollowNodeInfo> > >, bool (*)(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)> (__first=..., __last=..., 
    __comp=0xf3adcdf4 <followCmp(follow_jce_def::jceFollowNodeInfo const&, follow_jce_def::jceFollowNodeInfo const&)>)
    at /usr/include/c++/4.1.2/bits/stl_algo.h:2751

#7  0xf3ae2fd0 in Logic::FollowDataGet (this=0xf37ff008, flow=4, arg1=0x9d83c88, arg2=0x9d7f650) at ./include/logic.h:480


#6有问题。

原因,std::sort(v.begin(),v.end(),cmp) 中的cmp函数没有保证单调性。否则sort里面有个插入操作会越界。

必须保证,如果 a<=b ,b<=c 则 a<=c。



0 0