0

I'm using the KdTree algorithms from FLANN. Here is the codes that went wrong:

template<typename T>
base_any_policy* get_policy()
{
    static typename choose_policy<T>::type policy;
    std::cout << "getting typeid..." << std::endl << typeid(policy).name() << "typeid() seemed ok" << std::endl;
    return &policy;
}

the program simply crashes. Outputting only getting typeid....

That's only the code I've used for debug purpose. The original issue I encountered crashes at this line (FLANN version 1.9.1)

I'm using the PCL library (on macOS Mojave) to process some point cloud, which in turn uses FLANN. However, every time I create a kdtree and invoke setInputCloud(), the program crashes.

To debug, I modified this line of the source code to the snippet provided above.

It's difficult to reproduce this issue, since when I created a simple testing program, it won't crash. The crashes only happen in one of my large projects.

PS. --fno-rtti flag is not set, or the code above just won't compile.

backtrace:

1   flann::anyimpl::base_any_policy * flann::anyimpl::get_policy<flann::anyimpl::empty_any>()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                any.h                   148  0x104e7252b 
2   flann::any::any()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        any.h                   172  0x104e724d9 
3   flann::any::any()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        any.h                   173  0x104e724b5 
4   std::pair<std::string const, flann::any>::pair<std::string&&, 0ul>(std::piecewise_construct_t, std::tuple<std::string&&>&, std::tuple<>&, std::__tuple_indices<0ul>, std::__tuple_indices<>)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             tuple                   1365 0x104e71ebf 
5   std::pair<std::string const, flann::any>::pair<std::string&&, 0ul>(std::piecewise_construct_t, std::tuple<std::string&&>&, std::tuple<>&, std::__tuple_indices<0ul>, std::__tuple_indices<>)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             tuple                   1366 0x104e71dce 
6   std::pair<std::string const, flann::any>::pair<std::string&&>(std::piecewise_construct_t, std::tuple<std::string&&>, std::tuple<>)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       utility                 487  0x104e71da4 
7   void std::allocator<std::__tree_node<std::__value_type<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, flann::any>, void *>>::construct<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char>> const, flann::any>, std::piecewise_construct_t const&, std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char>>&&>, std::tuple<>>(std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char>> const, flann::any> *, std::piecewise_construct_t const&&&, std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char>>&&>&&, std::tuple<>&&)                                                                                                                                                                                                               memory                  1805 0x104e71da4 
8   void std::allocator_traits<std::allocator<std::__tree_node<std::__value_type<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, flann::any>, void *>>>::__construct<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char>> const, flann::any>, std::piecewise_construct_t const&, std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char>>&&>, std::tuple<>>(std::integral_constant<bool, true>, std::allocator<std::__tree_node<std::__value_type<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, flann::any>, void *>>&, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char>> const, flann::any> *, std::piecewise_construct_t const&&&, std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char>>&&>&&, std::tuple<>&&) memory                  1715 0x104e71d33 
9   void std::allocator_traits<std::allocator<std::__tree_node<std::__value_type<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, flann::any>, void *>>>::construct<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char>> const, flann::any>, std::piecewise_construct_t const&, std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char>>&&>, std::tuple<>>(std::allocator<std::__tree_node<std::__value_type<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, flann::any>, void *>>&, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char>> const, flann::any> *, std::piecewise_construct_t const&&&, std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char>>&&>&&, std::tuple<>&&)                                       memory                  1561 0x104e71ccf 
10  std::unique_ptr<std::__tree_node<std::__value_type<std::string, flann::any>, void *>, std::__tree_node_destructor<std::allocator<std::__tree_node<std::__value_type<std::string, flann::any>, void *>>>> std::__tree<std::__value_type<std::string, flann::any>, std::__map_value_compare<std::string, std::__value_type<std::string, flann::any>, std::less<std::string>, true>, std::allocator<std::__value_type<std::string, flann::any>>>::__construct_node<std::piecewise_construct_t const&, std::tuple<std::string&&>, std::tuple<>>(std::piecewise_construct_t const&&&, std::tuple<std::string&&>&&, std::tuple<>&&)                                                                                                                                                                                                                                            __tree                  2192 0x104e71c6b 
11  std::pair<std::__tree_iterator<std::__value_type<std::string, flann::any>, std::__tree_node<std::__value_type<std::string, flann::any>, void *> *, long>, bool> std::__tree<std::__value_type<std::string, flann::any>, std::__map_value_compare<std::string, std::__value_type<std::string, flann::any>, std::less<std::string>, true>, std::allocator<std::__value_type<std::string, flann::any>>>::__emplace_unique_key_args<std::string, std::piecewise_construct_t const&, std::tuple<std::string&&>, std::tuple<>>(std::string const&, std::piecewise_construct_t const&&&, std::tuple<std::string&&>&&, std::tuple<>&&)                                                                                                                                                                                                                                           __tree                  2137 0x104e702b1 
12  std::map<std::string, flann::any>::operator[](std::string&&)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             map                     1329 0x104e700b2 
13  flann::KDTreeSingleIndexParams::KDTreeSingleIndexParams(int, bool)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       kdtree_single_index.h   55   0x104e6fcde 
14  flann::KDTreeSingleIndexParams::KDTreeSingleIndexParams(int, bool)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       kdtree_single_index.h   54   0x104e6ef8a 
15  pcl::KdTreeFLANN<pcl::PointXY, flann::L2_Simple<float>>::setInputCloud(boost::shared_ptr<pcl::PointCloud<pcl::PointXY> const> const&, boost::shared_ptr<std::vector<int> const> const&)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  kdtree_flann.hpp        126  0x104e6897e 
16  MergeMatcher::match(std::vector<std::shared_ptr<GeometryModel>>&, std::vector<std::shared_ptr<Tracklet>>&, double)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       merge_matcher.cc        102  0x104f4280f 
17  SingleModelTracker::compute()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            single_model_tracker.cc 146  0x104ff9dc2 
18  TrackingCenter::tracking_callback(boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  tracking_center.cc      252  0x104db343d 
19  boost::_mfi::mf1<void, TrackingCenter, boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&>::operator()(TrackingCenter *, boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&) const                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   mem_fn_template.hpp     165  0x104df8c81 
20  void boost::_bi::list2<boost::_bi::value<TrackingCenter *>, boost::arg<1>>::operator()<boost::_mfi::mf1<void, TrackingCenter, boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&>, boost::_bi::rrlist1<boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&>>(boost::_bi::type<void>, boost::_mfi::mf1<void, TrackingCenter, boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&>&, boost::_bi::rrlist1<boost::shared_ptr<perception_msgs::seg2trackMsg_<std::allocator<void>> const> const&>&, int)                                                                                                                                                                                                                                                                  bind.hpp                319  0x104df8bdb 
... <More> (the rest are irrelevant)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
victl
  • 161
  • 1
  • 6
  • Thank you for replying, but I already stated, I DIDN'T set that flag... – victl Dec 24 '18 at 00:51
  • Ah, I read that line incorrectly. I thought you said you _did_ add that flag. Apologies. – Miles Budnek Dec 24 '18 at 00:53
  • Trying to dynamic_cast will also crash. Referring to [this answer](https://stackoverflow.com/a/280031/5962135), the reasons provided there seemed not applying to the `FLANN`'s implementation. – victl Dec 24 '18 at 01:13

1 Answers1

0

This might be a bug of the FLANN library as indicated by this and this issue tickets at github. What I might encountered is the "magic statics" issue.

The solution is given by the former link.

victl
  • 161
  • 1
  • 6