From c32f938d1527ad5ca54aa2da3dcad89af9424835 Mon Sep 17 00:00:00 2001 From: Jingye Qiu Date: Tue, 9 Jan 2024 18:45:35 +0800 Subject: [PATCH] Use adaptive array size to avoid SIGSEGV --- src/lio/LidarFeatureExtractor.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/lio/LidarFeatureExtractor.cpp b/src/lio/LidarFeatureExtractor.cpp index a86063a..30c910b 100644 --- a/src/lio/LidarFeatureExtractor.cpp +++ b/src/lio/LidarFeatureExtractor.cpp @@ -89,17 +89,16 @@ bool LidarFeatureExtractor::plane_judge(const std::vector& point_list void LidarFeatureExtractor::detectFeaturePoint(pcl::PointCloud::Ptr& cloud, std::vector& pointsLessSharp, std::vector& pointsLessFlat){ - int CloudFeatureFlag[20000]; - float cloudCurvature[20000]; - float cloudDepth[20000]; - int cloudSortInd[20000]; - float cloudReflect[20000]; - int reflectSortInd[20000]; - int cloudAngle[20000]; - pcl::PointCloud::Ptr& laserCloudIn = cloud; int cloudSize = laserCloudIn->points.size(); + int CloudFeatureFlag[cloudSize + 1]; + float cloudCurvature[cloudSize + 1]; + float cloudDepth[cloudSize + 1]; + int cloudSortInd[cloudSize + 1]; + float cloudReflect[cloudSize + 1]; + int reflectSortInd[cloudSize + 1]; + int cloudAngle[cloudSize + 1]; PointType point; pcl::PointCloud::Ptr _laserCloud(new pcl::PointCloud()); @@ -939,17 +938,16 @@ void LidarFeatureExtractor::detectFeaturePoint2(pcl::PointCloud::Ptr& void LidarFeatureExtractor::detectFeaturePoint3(pcl::PointCloud::Ptr& cloud, std::vector& pointsLessSharp){ - int CloudFeatureFlag[20000]; - float cloudCurvature[20000]; - float cloudDepth[20000]; - int cloudSortInd[20000]; - float cloudReflect[20000]; - int reflectSortInd[20000]; - int cloudAngle[20000]; - pcl::PointCloud::Ptr& laserCloudIn = cloud; int cloudSize = laserCloudIn->points.size(); + int CloudFeatureFlag[cloudSize + 1]; + float cloudCurvature[cloudSize + 1]; + float cloudDepth[cloudSize + 1]; + int cloudSortInd[cloudSize + 1]; + float cloudReflect[cloudSize + 1]; + int reflectSortInd[cloudSize + 1]; + int cloudAngle[cloudSize + 1]; PointType point; pcl::PointCloud::Ptr _laserCloud(new pcl::PointCloud());