解除分配pcl :: PointCloud :: Ptr ]时的分段错误>

问题描述 投票:0回答:1

我有一个可以成功读取点云并将其存储在pcl::PointCloud<pcl::PointXYZ>::Ptr pcd中的函数

然后我跑

//filter the pointcloud to remove some noise while still keeping the cloud dense
pcl::PointCloud<pcl::PointXYZ>::Ptr tmp = filter_obj.filterVoxelGrid(pcd, 0.01, 0.01, 0.01);

其中filter_objstereo_pointcloud_filter的对象

pcl::PointCloud<pcl::PointXYZ>::Ptr stereo_pointcloud_filter::filterVoxelGrid(
    pcl::PointCloud<pcl::PointXYZ>::Ptr inputcloud,
    float voxelX, float voxelY, float voxelZ)
{

    pcl::PointCloud<pcl::PointXYZ>::Ptr outputcloud(new pcl::PointCloud<pcl::PointXYZ>);

    pcl::VoxelGrid<pcl::PointXYZ> sor;
    sor.setInputCloud(inputcloud);
    sor.setLeafSize(voxelX, voxelY, voxelZ);
    sor.filter(*outputcloud);

    pcl::PointCloud<pcl::PointXYZ>::Ptr result(outputcloud);
    return result;
}

我在tmp的取消分配过程中遇到了分段错误。我几乎可以肯定,该错误与filterVoxelGrid()中的一些错误指针有关,但我不确定如何解决。

这里是调用堆栈

libc.so.6!__ GI ___ libc_free(void * mem)(/usr/src/glibc/glibc-2.23/malloc/malloc.c:2951)Eigen :: internal :: handmade_aligned_free(void * ptr)(/home/shawn/Documents/Projects/catkin_ws/devel/include/Eigen/src/Core/util/Memory.h:98)Eigen :: internal :: aligned_free(void * ptr)(/home/shawn/Documents/Projects/catkin_ws/devel/include/Eigen/src/Core/util/Memory.h:179)Eigen :: aligned_allocator :: deallocate(Eigen :: aligned_allocator * const this,Eigen :: aligned_allocator :: pointer p)(/ home / shawn / Documents / Projects / catkin_ws / devel / include / Eigen / src / Core / util / Memory .h:755)std :: allocator_traits> :: deallocate(Eigen :: aligned_allocator&__a,std :: allocator_traits> :: pointer __p,std :: allocator_traits> :: size_type __n)(/ usr / include / c ++ / 5 / bits / alloc_traits。 h:386)std :: _ Vector_base> :: _ M_deallocate(std :: _ Vector_base> * const this,std :: _ Vector_base> :: pointer __p,std :: size_t __n)(/usr/include/c++/5/bits/stl_vector.h: 178)std :: _ Vector_base> ::〜_Vector_base(std :: _ Vector_base> * const this)(/usr/include/c++/5/bits/stl_vector.h:160)std :: vector> ::〜vector(std :: vector> * const this)(/usr/include/c++/5/bits/stl_vector.h:425)pcl :: PointCloud ::〜PointCloud(pcl :: PointCloud * const this)(/usr/local/include/pcl-1.8/pcl/point_cloud.h:240)pcl :: PointCloud ::〜PointCloud(pcl :: PointCloud * const this)(/usr/local/include/pcl-1.8/pcl/point_cloud.h:240)boost :: checked_delete>(pcl :: PointCloud * x)(/usr/include/boost/core/checked_delete.hpp:34)boost :: detail :: sp_counted_impl_p> :: dispose(boost :: detail :: sp_counted_impl_p> * const this)(/usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp:78)boost :: detail :: sp_counted_base :: release(boost :: detail :: sp_counted_base * const this)(/usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:146)boost :: detail :: shared_count ::〜shared_count(boost :: detail :: shared_count * const this)(/usr/include/boost/smart_ptr/detail/shared_count.hpp:443)boost :: shared_ptr> ::〜shared_ptr(boost :: shared_ptr> * const this)(/usr/include/boost/smart_ptr/shared_ptr.hpp:323)read_PCD_file(std :: __ cxx11 :: string pcdFilePath)(/home/shawn/Documents/Projects/catkin_ws/src/file.cpp:402)main(int argc,char ** argv)(/home/shawn/Documents/Projects/catkin_ws/src/file.cpp:567)

我有一个可以成功读取点云并将其存储在pcl :: PointCloud <:pointxyz>:: Ptr pcd中的函数,然后运行//过滤点云以除去一些噪音,同时仍然保持...

c++ malloc shared-ptr point-cloud-library
1个回答
0
投票

虽然我无法找到此问题的解决方案,但我找到了一种解决方法。我切换为使用pcl::PCLPointCloud2pcl::PointCloud<pcl::PointXYZ> intead,并且代码运行正常。

© www.soinside.com 2019 - 2024. All rights reserved.