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

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

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::Vector3d>申请的地址没有对齐,从而无法进行加速运算,报错。
更详细的解释可以看看这两篇博文,写的很好,看完可以对Eigen有更深的理解:
https://zhuanlan.zhihu.com/p/93824687
https://blog.csdn.net/derteanoo/article/details/83303760

3. 解决方案

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

// vector<Eigen::Isometry3d> poses;         // 相机位姿
    vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>> poses; // 地址对齐
  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值