apollo
apollo copied to clipboard
相同的代码在x86平台出现double free or corruption,在arm平台正常运行
我自己移植了一个建图算法,里面使用了pcl的ransac平面拟合算法,x86电脑平台下,gdb调试确定,在调用 ransac.computeModel()这个函数的时候出现内存重复释放的错误。同样是相同的代码在cmake编译下可以正常运行。同样也是相同的代码,在arm工控机平台就可以正常运行。都是使用--config=opt --config=gpu的编译选项。
此外,我在x86平台上写了个小demo测试
void PclTestCpt::pcCbk(const std::shared_ptrapollo::drivers::PointCloud &msg) {
pcl::PointCloudpcl::PointXYZ::Ptr cloud_tmp(new pcl::PointCloudpcl::PointXYZ);
for(int k=0;k
std::cout << "--------------------------" << cloud_tmp->points.size() << std::endl;;
pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr model_p(new pcl::SampleConsensusModelPlane<pcl::PointXYZ>(cloud_tmp));
pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_p);
ransac.setDistanceThreshold(0.1);
std::cout << "--------------1------------" << std::endl;
ransac.computeModel();
std::cout << "--------------2------------" << std::endl;
pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
ransac.getInliers(inliers->indices);
Eigen::VectorXf coeffs;
ransac.getModelCoefficients(coeffs);
// std::vector<int> inliers;
// Eigen::Vector4f coefficients;
// RANSACWithPlane(cloud_tmp,inliers,coefficients);
for(int i = 0; i < 4; i++)
{
std::cout << coeffs[i] << ", ";
}
// pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
// pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
// pcl::SACSegmentation<pcl::PointXYZ> seg;
// seg.setOptimizeCoefficients(true);
// seg.setModelType(pcl::SACMODEL_PLANE);
// seg.setMaxIterations(10000);
// seg.setDistanceThreshold(0.15);
// seg.setInputCloud(cloud_tmp);
// seg.segment(*inliers, *coefficients);
std::cout << "inliers size : " << inliers->indices.size() << std::endl;
std::cout << std::endl << "--------------------------" << std::endl;;
}
上述测试用例是可以正常运行,然而我把上述代码原封不动移植到我自己的工程:
也出现了相同的错误double free or corruption (out)
Aborted (core dumped)。
经过我的调试发现pcl调ransac的时候会出现内存错误。我在工控机上面试了一下这个,可以正常运行,不会出现内存重复释放的错。随后我又在pc机上面测试了一下,我之前写了一个小的测试用例,继承Component类,只进行pcl的ransan拟合,我发现只要我添加了g2o的依赖项,就会出现这个问题,我把g2o的依赖取消,这个测试用例就可以跑起来。我已经拉取了两个不同的镜像测试,更换了多个g2o版本,问题依旧存在
具体是在哪个分支,commit上出现这个问题?请提供相应信息让我们进一步排查