使用 pcl::ExtractIndices (pcl, ROS, catkin) 在 main 之前出现分段错误

Posted

技术标签:

【中文标题】使用 pcl::ExtractIndices (pcl, ROS, catkin) 在 main 之前出现分段错误【英文标题】:Segmentation fault before main with pcl::ExtractIndices (pcl, ROS, catkin) 【发布时间】:2015-04-08 22:10:45 【问题描述】:

我正在尝试在 C++ 中运行以下命令:

#include <pcl_ros/point_cloud.h>
#include "pcl/pcl_base.h"
#include "pcl/PointIndices.h"
#include "pcl/conversions.h"
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/voxel_grid.h>

using namespace std;
using namespace pcl;

void myFunction() 
     ...
     ExtractIndices<PointXYZ> rangefilter;
     ...


int main() 
     cout << "Hello" << endl;

代码可以编译,但是一运行就出现分段错误; cout 语句未执行。请注意,我实际上什至没有在 main 中调用 myFunction()。唯一的错误信息是

Segmentation fault (core dumped)

当我注释掉 myFunction 中的 ExtractIndices 行时,问题就消失了,代码运行正常:

     // ExtractIndices<PointXYZ> rangefilter;

如果有帮助,我正在使用 ROS 在 Ubuntu 上运行它并使用 catkin_make 编译它。

我非常感谢调试此问题的一些帮助,因为我已经被这个问题困扰了一段时间。感谢阅读!

【问题讨论】:

调试器在哪里说它会爆炸? main之前出现crash的原因主要是在main()运行之前构造了全局或者静态的对象,而这些对象的构造导致了错误。您需要获取导致崩溃的调用函数的堆栈跟踪。 Start here. 【参考方案1】:

感谢评论者的帮助,我能够找到问题所在。我使用 gdb 进行了回溯并搜索了输出:

boost::math::lanczos::lanczos_initializer<boost::math::lanczos::lanczos17m64, long double>::init::init()

然后发现这个:http://answers.ros.org/question/194699/segmentation-fault-when-using-correspondencerejectorsampleconsensus/

这说明你不能在 PCL 中使用 C++11,所以我从我的 CMakeLists.txt 文件中删除了这一行:

set(CMAKE_CXX_FLAGS "-std=c++0x $CMAKE_CXX_FLAGS")

它成功了!

【讨论】:

以上是关于使用 pcl::ExtractIndices (pcl, ROS, catkin) 在 main 之前出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

free(p),是啥意思?是单纯p==NULL还是说p指向的内容变为空。使用free()之后 p和内存的状态是啥情况的

使用 p 值逐步回归以删除 p 值不显着的变量

如何在 p:dataTable 中使用 p:graphicImage 和 StreamedContent? [复制]

(n*2-1)%p:n和p为32位时避免使用64位

如何使用 stat_cor() 函数将大写字母 P 的 p 值传递给 ggplot 对象?

与普通的 p/Invoke 调用相比,使用不安全的 P/Invoke 调用是不是有性能优势?