Ошибка собственной плотной сегментации хранилища в функции Open3D

#c #linux #segmentation-fault #eigen #open3d

#c #linux #ошибка сегментации #eigen #open3d

Вопрос:

Мне нужно выполнить некоторые операции в PointCloud с помощью библиотеки Open3D, но это приводит к ошибке сегментации, а отладчики не дают много информации о проблеме. Это странно, потому что тот же код работает в Windows, но в Ubuntu выдает такую ошибку.

Вывод обратной трассировки GDB:

 #0  0x00005555555f5c77 in open3d::geometry::Geometry3D::ComputeMinBound(std::vector<Eigen::Matrix<double, 3, 1, 0, 3, 1>, std::allocator<Eigen::Matrix<double, 3, 1, 0, 3, 1> > > constamp;) const (this=0x7fffffffd250, points=...) at /home/rufus/Open3D/cpp/open3d/geometry/Geometry3D.cpp:50
#1  0x000055555561d951 in open3d::geometry::PointCloud::GetMinBound() const (this=<optimized out>) at /home/rufus/Open3D/cpp/open3d/geometry/PointCloud.cpp:52
#2  0x0000555555622dcd in open3d::geometry::PointCloud::VoxelDownSample(double) const (this=0x7fffffffd250, voxel_size=0.01) at /home/rufus/Open3D/cpp/open3d/geometry/PointCloud.cpp:312
#3  0x000055555557a690 in colorCloudRegistrationOptimization(boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB> const>, boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB> const>, Eigen::Matrix<double, 4, 4, 0, 4, 4> constamp;) ()
#4  0x000055555557d569 in main ()
  

Вывод Valgrind:

 ==7030== Process terminating with default action of signal 11 (SIGSEGV)
==7030==  Access not within mapped region at address 0x10
==7030==    at 0x1A9C47: DenseStorage (DenseStorage.h:194)
==7030==    by 0x1A9C47: PlainObjectBase (PlainObjectBase.h:520)
==7030==    by 0x1A9C47: Matrix (Matrix.h:413)
==7030==    by 0x1A9C47: open3d::geometry::Geometry3D::ComputeMinBound(std::vector<Eigen::Matrix<double, 3, 1, 0, 3, 1>, std::allocator<Eigen::Matrix<double, 3, 1, 0, 3, 1> > > constamp;) const (Geometry3D.cpp:50)
==7030==    by 0x1D1920: open3d::geometry::PointCloud::GetMinBound() const (PointCloud.cpp:52)
==7030==    by 0x1D6D9C: open3d::geometry::PointCloud::VoxelDownSample(double) const (PointCloud.cpp:312)
==7030==    by 0x12E68F: colorCloudRegistrationOptimization(boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB> const>, boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB> const>, Eigen::Matrix<double, 4, 4, 0, 4, 4> constamp;) (in /home/rufus/HoloportationLinuxPart/san_holo/build/san_holo
  

Я попытался скомпилировать его с помощью EIGEN_DONT_ALIGN_STATICALLY, но результат тот же.

Ответ №1:

Поскольку адрес, сообщаемый Valgrind, настолько низок 0x10, это позволяет мне думать, что вы используете нулевой указатель на объект или неинициализированный объект.