视觉SLAM十四讲 报错ch12: segmentation fault (core dumped) ./pointcloud_mapping

视觉SLAM十四讲 报错ch12/pointcloud_mapping: segmentation fault core dumped ./pointcloud_mapping

  • 1. 问题
  • 2. 原因
  • 3. 解决方案

1. 问题

编译高博的视觉SLAM十四讲ch12的./pointcloud_mapping没有问题,但是运行的时候出现错误:

$ ./pointcloud_mapping
[1]    863 segmentation fault (core dumped)  ./pointcloud_mapping

2. 原因

segmentation fault即段错误,常常在访问不可访问的内存或越界时出现,更多的原因。在这里,问题出在Eigen,也就是代码./pointcloud_mapping中的:

	vector<Eigen::Isometry3d> poses;         // 相机位姿

我们知道EIGEN是非常强大的C++矩阵运算库,为了加速运算,Eigen运用了SSE、AVX等指令集进行向量化加速。而加速运算需要对数据进行对齐(详情参考知乎,写的很好,涉及到内存申请、指针对齐等),C++的STL比如std::vector在没有重写的情况下,使用默认的动态内存申请,使得类似于std::vector申请的地址没有对齐,从而无法进行加速运算,报错。
更详细的解释可以看看这两篇博文,写的很好,看完可以对Eigen有更深的理解:
https://zhuanlan.zhihu.com/p/93824687
https://blog.csdn.net/derteanoo/article/details/83303760

3. 解决方案

利用Eigen中的Eigen::aligned_allocator使得STL申请内存时内存对齐:

// vector poses;         // 相机位姿
    vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>> poses; // 地址对齐

你可能感兴趣的:(slambook2,error,自动驾驶,人工智能,机器学习,c++)