项目场景:
在visual studio中使用PCL中的passthrough模块对点云做直通滤波
问题描述
调用passthrough代码如下:
//创建滤波器对象
pcl::PassThrough<pcl::PointXYZ> pass;
//设置需要过滤的字段
pass.setInputCloud(cloud);
//设置范围
pass.setFilterFieldName("z");
pass.setFilterLimits(-10.0, 1.0);
//pass.setFilterLimitsNegative (true);
pass.filter(*cloud);
pcl::PassThrough<pcl::PointXYZ> pass2;
//设置需要过滤的字段
pass2.setInputCloud(cloud2);
//设置范围
pass2.setFilterFieldName("z");
pass2.setFilterLimits(-10.0, 1.0);
pass2.filter(*cloud2);
运行之后的中断在这个函数里:
/** \internal Frees memory allocated with aligned_malloc. */
EIGEN_DEVICE_FUNC inline void aligned_free(void *ptr)
{
#if (EIGEN_DEFAULT_ALIGN_BYTES==0) || EIGEN_MALLOC_ALREADY_ALIGNED
EIGEN_USING_STD(free)
free(ptr);
#else
handmade_aligned_free(ptr);
#endif
}
原因分析:
运行断在释放指针处,可能是double free了,但是因为这段代码是官方示例里的,使用的时候没有做修改,因此造成double free的原因不明
解决方案:
打开VS的项目属性,C/C++ --> 代码生成 --> 启用增强指令集 ,选择高级矢量拓展 AVX ,然后重新生成项目,问题就解决了,原理待更新。