代码之家  ›  专栏  ›  技术社区  ›  n179911

mac osx上的boost asio示例崩溃

  •  0
  • n179911  · 技术社区  · 15 年前

    但它崩溃了:

    From the console:
    /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/debug/safe_iterator.h:127:
       error: attempt to copy-construct an iterator from a singular iterator.
    
    Objects involved in the operation:
    iterator "this" @ 0x0x100420 {
    type = N11__gnu_debug14_Safe_iteratorIN10__gnu_norm14_List_iteratorISt4pairIiPN5boost4asio6detail16reactor_op_queueIiE7op_baseEEEEN15__gnu_debug_def4listISB_SaISB_EEEEE
    (mutable iterator);
     state = singular;
    }
    iterator "other" @ 0x0xbfffee64 {
    type = N11__gnu_debug14_Safe_iteratorIN10__gnu_norm14_List_iteratorISt4pairIiPN5boost4asio6detail16reactor_op_queueIiE7op_baseEEEEN15__gnu_debug_def4listISB_SaISB_EEEEE
    (mutable iterator);
     state = singular;
    }
    Program received signal:  “SIGABRT”.
    

    从回溯:

    (gdb) bt
    #0  0x918c3e42 in __kill ()
    #1  0x918c3e34 in kill$UNIX2003 ()
    #2  0x9193623a in raise ()
    #3  0x91942679 in abort ()
    #4  0x940d96f9 in __gnu_debug::_Error_formatter::_M_error ()
    #5  0x0000ada6 in
    __gnu_debug::_Safe_iterator<__gnu_norm::_List_iterator<std::pair<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*> >,
    __gnu_debug_def::list<std::pair<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>,
    std::allocator<std::pair<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*> > >
    >::_Safe_iterator (this=0x100420, __x=@0xbfffee64) at
    debug/safe_iterator.h:124
    #6  0x00010195 in boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type::bucket_type
    (this=0x100420) at hash_map.hpp:277
    #7  0x0001291d in std::_Construct<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    (__p=0x100420, __value=@0xbfffee64) at stl_construct.h:81
    #8  0x00012edd in
    std::__uninitialized_fill_n_aux<__gnu_cxx::__normal_iterator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type*,
    __gnu_norm::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type> >
    >, unsigned long, boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    (__first={_M_current = 0x100420}, __n=3, __x=@0xbfffee64) at
    stl_uninitialized.h:194
    #9  0x00012f67 in
    std::uninitialized_fill_n<__gnu_cxx::__normal_iterator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type*,
    __gnu_norm::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type> >
    >, unsigned long, boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    (__first={_M_current = 0x100420}, __n=3, __x=@0xbfffee64) at
    stl_uninitialized.h:218
    #10 0x00012f8f in
    std::__uninitialized_fill_n_a<__gnu_cxx::__normal_iterator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type*,
    __gnu_norm::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type> >
    >, unsigned long, boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    (__first={_M_current = 0x100420}, __n=3, __x=@0xbfffee64) at
    stl_uninitialized.h:310
    #11 0x000134ba in
    __gnu_norm::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    >::_M_fill_insert (this=0x1002f0, __position={_M_current = 0x0},
    __n=3, __x=@0xbfffee64) at vector.tcc:365
    #12 0x00013760 in
    __gnu_norm::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    >::insert (this=0x1002f0, __position={_M_current = 0x0}, __n=3,
    __x=@0xbfffee64) at stl_vector.h:658
    #13 0x00013807 in
    __gnu_norm::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    >::resize (this=0x1002f0, __new_size=3, __x=@0xbfffee64) at
    stl_vector.h:427
    #14 0x000138c0 in
    __gnu_debug_def::vector<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
    std::allocator<boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
    >::resize (this=0x1002f0, __sz=3, __c=@0xbfffee64) at debug/vector:169
    #15 0x0001400e in boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::rehash
    (this=0x1002c4, num_buckets=3) at hash_map.hpp:221
    #16 0x0001443b in boost::asio::detail::hash_map<int,
    boost::asio::detail::reactor_op_queue<int>::op_base*>::hash_map
    (this=0x1002c4) at hash_map.hpp:67
    #17 0x000144c4 in
    boost::asio::detail::reactor_op_queue<int>::reactor_op_queue
    (this=0x1002c0) at reactor_op_queue.hpp:42
    #18 0x00014574 in
    boost::asio::detail::kqueue_reactor<false>::kqueue_reactor
    (this=0x100270, io_service=@0xbffff7a4) at kqueue_reactor.hpp:86
    #19 0x00014850 in
    boost::asio::detail::service_registry::use_service<boost::asio::detail::kqueue_reactor<false>
    > (this=0x100180) at service_registry.hpp:109
    #20 0x0001499d in
    boost::asio::use_service<boost::asio::detail::kqueue_reactor<false> >
    (ios=@0xbffff7a4) at impl/io_service.ipp:195
    #21 0x00014abd in
    boost::asio::detail::reactive_socket_service<boost::asio::ip::udp,
    boost::asio::detail::kqueue_reactor<false> >::reactive_socket_service
    (this=0x100250, io_service=@0xbffff7a4) at
    reactive_socket_service.hpp:111
    #22 0x00014b94 in
    boost::asio::detail::service_registry::use_service<boost::asio::detail::reactive_socket_service<boost::asio::ip::udp,
    boost::asio::detail::kqueue_reactor<false> > > (this=0x100180) at
    service_registry.hpp:109
    #23 0x00014ce1 in
    boost::asio::use_service<boost::asio::detail::reactive_socket_service<boost::asio::ip::udp,
    boost::asio::detail::kqueue_reactor<false> > > (ios=@0xbffff7a4) at
    impl/io_service.ipp:195
    #24 0x00014d25 in
    boost::asio::datagram_socket_service<boost::asio::ip::udp>::datagram_socket_service
    (this=0x100230, io_service=@0xbffff7a4) at
    datagram_socket_service.hpp:95
    #25 0x00014dee in
    boost::asio::detail::service_registry::use_service<boost::asio::datagram_socket_service<boost::asio::ip::udp>
    > (this=0x100180) at service_registry.hpp:109
    #26 0x00014f3b in
    boost::asio::use_service<boost::asio::datagram_socket_service<boost::asio::ip::udp>
    > (ios=@0xbffff7a4) at impl/io_service.ipp:195
    #27 0x00014f61 in
    boost::asio::basic_io_object<boost::asio::datagram_socket_service<boost::asio::ip::udp>
    >::basic_io_object (this=0xbffff6a4, io_service=@0xbffff7a4) at
    basic_io_object.hpp:72
    #28 0x00014fd3 in boost::asio::basic_socket<boost::asio::ip::udp,
    boost::asio::datagram_socket_service<boost::asio::ip::udp>
    >::basic_socket (this=0xbffff6a4, io_service=@0xbffff7a4,
    endpoint=@0xbffff6b8) at basic_socket.hpp:108
    #29 0x000150b5 in
    boost::asio::basic_datagram_socket<boost::asio::ip::udp,
    boost::asio::datagram_socket_service<boost::asio::ip::udp>
    >::basic_datagram_socket (this=0xbffff6a4, io_service=@0xbffff7a4,
    endpoint=@0xbffff6b8) at basic_datagram_socket.hpp:107
    #30 0x00002022 in server (io_service=@0xbffff7a4, port=8090) at
    /Users/n179911/Documents/ServerXCode/main.cpp:21
    #31 0x0000217a in main (argc=2, argv=0xbffff7e8) at
    /Users/n179911/Documents/ServerXCode/main.cpp:47
    (gdb)
    

    有人知道吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   count0    15 年前

    据我所知,对单值的唯一保证操作是分配一个非奇异值。由于我认为lib代码还可以,我得到的印象是,您的问题更多地与构建过程有关:

    我会尝试以下方法来找出问题所在:

    1. 使用大量优化有时会导致问题,在极少数情况下,默认优化也可能会出现问题。删除所有优化。

    2. 使用第一个编译器版本(4.0.0、3.0.0等)也可能是一个问题,因为这些版本大多有缺陷(至少在GNUCC的情况下是这样)。试试4.1之类的。