[BGL] Boost 1.45 implicit graph A* example crashes
Hi, I just tried running example included with BGL astar_maze.cpp and it crashes every time I do that. Call stack (VC++ 2008 SP1):
astar_maze.exe!boost::unordered_detail::hash_table<boost::unordered_detail::set<vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<boost::array<unsigned int,2> > > >::find_iterator(boost::unordered_detail::hash_bucket<std::allocator<boost::array<unsigned int,2> > > * bucket=0xcfec9914, const boost::array<unsigned int,2> & k=0x002cf0d8) Line 55 + 0x3 bytes C++ astar_maze.exe!boost::unordered_detail::hash_table<boost::unordered_detail::set<vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<boost::array<unsigned int,2> > > >::find(const boost::array<unsigned int,2> & k=0x002cf0d8) Line 583 + 0x10 bytes C++ astar_maze.exe!boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > >::find(const boost::array<unsigned int,2> & k=0x002cf0d8) Line 400 + 0x13 bytes C++ astar_maze.exe!boost::set_contains<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> >,boost::array<unsigned int,2> >(const boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > & s={...}, const boost::array<unsigned int,2> & x=0x002cf0d8) Line 21 + 0x23 bytes C++ astar_maze.exe!boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > ::operator()<boost::array<unsigned int,2> >(const boost::array<unsigned int,2> & x=0x002cf0d8) Line 60 + 0xf bytes C++ astar_maze.exe!boost::filter_iterator<boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > ,boost::transform_iterator<boost::detail::grid_graph_vertex_at<boost::grid_graph<2,unsigned int,unsigned int> >,boost::counting_iterator<unsigned int,boost::use_default,boost::use_default>,boost::use_default,boost::use_default> ::satisfy_predicate() Line 100 + 0x41 bytes C++ astar_maze.exe!boost::filter_iterator<boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > ,boost::transform_iterator<boost::detail::grid_graph_vertex_at<boost::grid_graph<2,unsigned int,unsigned int> >,boost::counting_iterator<unsigned int,boost::use_default,boost::use_default>,boost::use_default,boost::use_default> ::filter_iterator<boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > ,boost::transform_iterator<boost::detail::grid_graph_vertex_at<boost::grid_graph<2,unsigned int,unsigned int> >,boost::counting_iterator<unsigned int,boost::use_default,boost::use_default>,boost::use_default,boost::use_default> (boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > > f={...}, boost::transform_iterator<boost::detail::grid_graph_vertex_at<boost::grid_graph<2,unsigned int,unsigned int> >,boost::counting_iterator<unsigned int,boost::use_default,boost::use_default>,boost::use_default,boost::use_default> x={...}, boost::transform_iterator<boost::detail::grid_graph_vertex_at<boost::grid_graph<2,unsigned int,unsigned int> >,boost::counting_iterator<unsigned int,boost::use_default,boost::use_default>,boost::use_default,boost::use_default> end_={...}) Line 60 C++ astar_maze.exe!boost::vertices<boost::grid_graph<2,unsigned int,unsigned int>,boost::keep_all,boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > > >(const boost::filtered_graph<boost::grid_graph<2,unsigned int,unsigned int>,boost::keep_all,boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > > > & g={...}) Line 285 + 0x5e bytes C++ astar_maze.exe!boost::astar_search<boost::filtered_graph<boost::grid_graph<2,unsigned int,unsigned int>,boost::keep_all,boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > > ,euclidean_heuristic,astar_goal_visitor,boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<std::pair<boost::array<unsigned int,2> const ,boost::array<unsigned int,2> > > > ,boost::shared_array_property_map<double,boost::grid_graph_index_map<boost::grid_graph<2,unsigned int,unsigned int>,boost::array<unsigned int,2>,unsigned int> ,boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,double,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<std::pair<boost::array<unsigned int,2> const ,double>
,boost::static_property_map<double>,boost::grid_graph_index_map<boost::grid_graph<2,unsigned int,unsigned int>,boost::array<unsigned int,2>,unsigned int>,boost::shared_array_property_map<enum boost::default_color_type,boost::grid_graph_index_map<boost::grid_graph<2,unsigned int,unsigned int>,boost::array<unsigned int,2>,unsigned int> ,std::less<double>,boost::closed_plus<double>,double,double>(const boost::filtered_graph<boost::grid_graph<2,unsigned int,unsigned int>,boost::keep_all,boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<boost::array<unsigned int,2> > > > > & g={...}, boost::array<unsigned int,2> s=0x002cf660, euclidean_heuristic h={...}, astar_goal_visitor vis={...}, boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<std::pair<boost::array<unsigned int,2> const ,boost::array<unsigned int,2> > > > > predecessor={...}, boost::shared_array_property_map<double,boost::grid_graph_index_map<boost::grid_graph<2,unsigned int,unsigned int>,boost::array<unsigned int,2>,unsigned int> > cost={...}, boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,double,vertex_hash,std::equal_to<boost::array<unsigned int,2> ,std::allocator<std::pair<boost::array<unsigned int,2> const ,double> distance={...}, boost::static_property_map<double> weight={...}, boost::grid_graph_index_map<boost::grid_graph<2,unsigned int,unsigned int>,boost::array<unsigned int,2>,unsigned int> index_map={...}, boost::shared_array_property_map<enum boost::default_color_type,boost::grid_graph_index_map<boost::grid_graph<2,unsigned int,unsigned int>,boost::array<unsigned int,2>,unsigned int> >
color={...}, std::less<double> compare=less, boost::closed_plus<double> combine={...}, double inf=1.7976931348623157e+308, double zero=0.00000000000000000) Line 287 + 0x10 bytes C++ astar_maze.exe!boost::astar_search<boost::filtered_graph<boost::grid_graph<2,unsigned int,unsigned int>,boost::keep_all,boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<boost::array<unsigned int,2> > > > >,euclidean_heuristic,astar_goal_visitor,enum boost::graph_visitor_t,boost::bgl_named_params<boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,double,vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<std::pair<boost::array<unsigned int,2> const ,double> > > >,enum boost::vertex_distance_t,boost::bgl_named_params<boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<std::pair<boost::array<unsigned int,2> const ,boost::array<unsigned int,2> > > > >,enum boost::vertex_predecessor_t,boost::bgl_named_params<boost::static_property_map<double>,enum boost::edge_weight_t,boost::no_property> > > >(const boost::filtered_graph<boost::grid_graph<2,unsigned int,unsigned int>,boost::keep_all,boost::is_not_in_subset<boost::unordered_set<boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<boost::array<unsigned int,2> > > > > & g={...}, boost::array<unsigned int,2> s=0x002cf8e8, euclidean_heuristic h={...}, const boost::bgl_named_params<astar_goal_visitor,enum boost::graph_visitor_t,boost::bgl_named_params<boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,double,vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<std::pair<boost::array<unsigned int,2> const ,double> > > >,enum boost::vertex_distance_t,boost::bgl_named_params<boost::associative_property_map<boost::unordered_map<boost::array<unsigned int,2>,boost::array<unsigned int,2>,vertex_hash,std::equal_to<boost::array<unsigned int,2> >,std::allocator<std::pair<boost::array<unsigned int,2> const ,boost::array<unsigned int,2> > > > >,enum boost::vertex_predecessor_t,boost::bgl_named_params<boost::static_property_map<double>,enum boost::edge_weight_t,boost::no_property> > > > & params={...}) Line 341 + 0x267 bytes C++ astar_maze.exe!maze::solve() Line 191 + 0xa2 bytes C++ astar_maze.exe!main(int argc=1, const char * * argv=0x00882610) Line 305 + 0xb bytes C++ astar_maze.exe!__tmainCRTStartup() Line 586 + 0x19 bytes C astar_maze.exe!mainCRTStartup() Line 403 C kernel32.dll!7593eccb() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] ntdll.dll!7779d24d() ntdll.dll!7779d45f()
On Sun, 28 Nov 2010, Szymon Gatner wrote:
Hi,
I just tried running example included with BGL astar_maze.cpp and it crashes every time I do that.
I was able to run it (the trunk version, which should match 1.45.0) under GCC and Linux without any problems. Valgrind reported no problems with the code either. Are you sure this isn't a problem in Boost.Unordered? I am not familiar with VC++ memory errors -- are you getting an invalid access (like a segmentation fault)? I saw references to PageHeap (<URL:http://support.microsoft.com/kb/286470>) online; it might be able to give more information about the problem. -- Jeremiah Willcock
participants (2)
-
Jeremiah Willcock
-
Szymon Gatner