Как typeid () или dynamic_cast () могут привести к сбою программы (используя библиотеку FLANN)? - PullRequest
0 голосов
/ 24 декабря 2018

Я использую алгоритмы KdTree из FLANN.Вот коды, которые пошли не так:

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;
}

программа просто вылетает.Вывод только getting typeid....

Это только тот код, который я использовал для отладки.Исходная проблема, с которой я столкнулся, вылетает при этой строке (FLANN версия 1.9.1)

Я использую библиотеку PCL (в macOS Mojave) для обработки некоторого облака точек, которое вХод использует FLANN.Однако каждый раз, когда я создаю kdtree и вызываю setInputCloud(), программа вылетает.

Для отладки я изменил эту строку исходного кода для предоставленного выше фрагмента.

Трудно воспроизвести эту проблему, поскольку, когда я создал простую тестовую программу, она не вылетает.Аварии случаются только в одном из моих крупных проектов.

PS.--fno-rtti флаг не установлен или код выше просто не скомпилируется.

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)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

1 Ответ

0 голосов
/ 24 декабря 2018

Это может быть ошибка библиотеки FLANN, обозначенная this и this заявками на выпуск на github.С чем я мог столкнуться, так это с проблемой "волшебной статики".

Решение дано по предыдущей ссылке.

...