问题描述:
随便跑了一段程序
PointCloud<PointNormal>::Ptr subsampleAndCalculateNormals(const PointCloud<PointXYZ>::Ptr& cloud)
{
PointCloud<PointXYZ>::Ptr cloud_subsampled(new PointCloud<PointXYZ>());
VoxelGrid<PointXYZ> subsampling_filter;
subsampling_filter.setInputCloud(cloud);
subsampling_filter.setLeafSize(subsampling_leaf_size);
subsampling_filter.filter(*cloud_subsampled);
PointCloud<Normal>::Ptr cloud_subsampled_normals(new PointCloud<Normal>());
NormalEstimation<PointXYZ, Normal> normal_estimation_filter;
normal_estimation_filter.setInputCloud(cloud_subsampled);
search::KdTree<PointXYZ>::Ptr search_tree(new search::KdTree<PointXYZ>);
normal_estimation_filter.setSearchMethod(search_tree);
normal_estimation_filter.setRadiusSearch(normal_estimation_search_radius);
normal_estimation_filter.compute(*cloud_subsampled_normals);
PointCloud<PointNormal>::Ptr cloud_subsampled_with_normals(
new PointCloud<PointNormal>());
concatenateFields(
*cloud_subsampled, *cloud_subsampled_normals, *cloud_subsampled_with_normals);
PCL_INFO("Cloud dimensions before / after subsampling: %zu / %zu\n",
static_cast<std::size_t>(cloud->size()),
static_cast<std::size_t>(cloud_subsampled->size()));
return cloud_subsampled_with_normals;
}
这个函数运行之后报错,报错信息定位到
D:\Program Files\PCL 1.12.0\3rdParty\Eigen\eigen3\Eigen\src\Core\util\Memory.h
Memory.h中的Eigen::internal::aligned_free上,看起来是一个释放指针或者什么的函数,不管怎么运行程序,或者重装PCL库、VS2019都解决不了这个bug。
/** \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
std::free(ptr);
#else
handmade_aligned_free(ptr);
#endif
}
后来我去PCL库的GitHub仓库去搜,有好多人也遇到这个bug。
下面记录这个bug在win10+VS的解决方案:在VS自己的项目的属性页,将启用增强指令集改为图中所示即可。
参考资料:
Eigen::internal::aligned_free bug · Issue #4859 · PointCloudLibrary/pcl (github.com)