【问题标题】:Segmentation Fault gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184分段错误 gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184
【发布时间】:2014-11-18 04:56:10
【问题描述】:

我在 c++ 程序(redhead 4.9.1,std = c++11)中将 Boost 1.56.0 用于其 dijkstra_shortest_paths。不知何故,我在 auto_ptr.h 中不断收到以下分段错误错误:184

Program received signal SIGSEGV, Segmentation fault.
std::auto_ptr<boost::property<boost::edge_weight_t, double, boost::no_property> >::operator* (this=) at /opt/devl/optimize/gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184
(gdb) bt
#0  std::auto_ptr<boost::property<boost::edge_weight_t, double, boost::no_property> >::operator* (this=) at /opt/devl/optimize/gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184
#1  boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> >::get_property (this=) at /usr/include/boost/graph/detail/adjacency_list.hpp:278
#2  boost::detail::out_edge_iter<std::_List_iterator<boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> > >, unsigned long, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long>::dereference (this=) at /usr/include/boost/graph/detail/adjacency_list.hpp:152
#3  boost::iterator_core_access::dereference<boost::detail::out_edge_iter<std::_List_iterator<boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> > >, unsigned long, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long> > (f=...) at /usr/include/boost/iterator/iterator_facade.hpp:516
#4  boost::iterator_facade<boost::detail::out_edge_iter<std::_List_iterator<boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> > >, unsigned long, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long>, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, boost::bidirectional_traversal_tag, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long>::operator* (this=) at /usr/include/boost/iterator/iterator_facade.hpp:634
#5  boost::breadth_first_visit<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::d_ary_heap_indirect<unsigned long, 4ul, boost::iterator_property_map<unsigned long*, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, unsigned long, unsigned long&>, int*, std::less<int>, std::vector<unsigned long, std::allocator<unsigned long> > >, boost::detail::dijkstra_bfs_visitor<boost::dijkstra_visitor<boost::null_visitor>, boost::d_ary_heap_indirect<unsigned long, 4ul, boost::iterator_property_map<unsigned long*, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, unsigned long, unsigned long&>, int*, std::less<int>, std::vector<unsigned long, std::allocator<unsigned long> > >, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, unsigned long*, int*, boost::closed_plus<int>, std::less<int> >, boost::two_bit_color_map<boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> > > (g=..., s=0, Q=..., vis=..., color=...) at /usr/include/boost/graph/breadth_first_search.hpp:77
#6  boost::dijkstra_shortest_paths_no_init<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::dijkstra_visitor<boost::null_visitor>, unsigned long*, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::less<int>, boost::closed_plus<int>, int, boost::two_bit_color_map<boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> > > (g=..., s=0, predecessor=, distance=, weight=..., index_map=..., 
    compare=..., combine=..., zero=0, vis=..., color=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:332
#7  boost::dijkstra_shortest_paths<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::dijkstra_visitor<boost::null_visitor>, unsigned long*, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::less<int>, boost::closed_plus<int>, int, int, boost::two_bit_color_map<boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> > > (g=..., s=0, predecessor=, distance=, weight=..., index_map=..., 
    compare=..., combine=..., inf=2147483647, zero=0, vis=..., color=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:383
#8  boost::dijkstra_shortest_paths<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::dijkstra_visitor<boost::null_visitor>, unsigned long*, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::less<int>, boost::closed_plus<int>, int, int, int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > (g=..., s=0, predecessor=, distance=, weight=..., 
    index_map=..., compare=..., combine=..., inf=2147483647, zero=0, vis=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:353
#9  boost::detail::dijkstra_dispatch2<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::bgl_named_params<int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > > (g=..., s=0, distance=, weight=..., index_map=..., params=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:423
#10 boost::detail::dijkstra_dispatch1<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::bgl_named_params<int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > > (g=..., s=0, distance=, weight=..., index_map=..., params=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:455
#11 boost::dijkstra_shortest_paths<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > (g=..., s=0, params=...)
    at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:473

如果您能帮助指出我做错了什么,将不胜感激。

【问题讨论】:

  • 您是否知道忘记包含任何代码?

标签: boost


【解决方案1】:

您似乎在某处使用auto_ptr&lt;&gt;

这种类型已被弃用(因为它几乎不可能正确使用并且很少安全)。特别是:您可以永远在标准库容器中使用它(因为它无法满足只读复制语义)。

假设你真的需要指针(你为什么需要?)你应该使用 Boost Pointer Container 库中的 ptr_vector、ptr_set 等,或者使用现代智能指针(unique_ptr、value_ptr、scoped_ptr、shared_ptr )

【讨论】:

  • 谢谢你!这是代码 sn-p 在执行时让我因分段错误而陷入困境。它只是您在 boost 中找到的 dijkstra 最短路径示例的副本。一旦调用,程序就会崩溃。当我进行回溯时,它显示这个 auto_ptr 正在被使用。不确定 Boost 是否使用它或什么,但这是我希望从像你这样的人那里获得帮助的地方。再次感谢您的帮助!
  • @Mark 你的意思是包含一个链接吗?或编辑问题。因为我没有看到任何代码 sn-p
  • 对不起,我没有把它贴出来(太长了): int nodeSize = (int) m_allNodeList.size(); graph_t g(m_allArcList.begin(), m_allArcList.end(), m_arcWeights.begin(), nodeSize); property_map::type weightmap = get(edge_weight, g); std::vector p(num_vertices(g)); std::vector d(num_vertices(g)); vertex_descriptor s = vertex(0, g); graph_traits ::edge_iterator ei; graph_traits ::edge_iterator ei_end;\ //在接下来的调用中,核心转储。 dijkstra_shortest_paths(g, s,previous_map(&p[0]).distance_map(&d[0]));
  • @Mark 您可以编辑问题。此外,您可以将代码减少到最低限度:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2014-11-11
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多