调试错误 - 矢量下标超出范围 - PCL

Debug error - vector subscript out of range - PCL

本文关键字:范围 PCL 错误 调试 下标      更新时间:2023-10-16

我收到一条"调试断言失败"错误消息,其中显示"矢量下标超出范围",在下面的代码片段中的两个打印之间。我在 1.7.1 位机器、Win7 和 VS2010 上使用 PCL 2010。

问题是,这是随机发生的,我不知道该怎么办。我如何调试这样的事情看起来像点云库 (PCL) 中的错误,但我犹豫不决,因为通常错误与我有关。

代码的作用是从文件中加载带有点云数据的 .pcd 文件,然后尝试从中创建 ESF 描述符。现在我知道,我在那个向量中没有索引,但它仍然没有发生在我的代码中......知道我可能做错了什么吗?

pcl::PointCloud<pcl::ESFSignature640>::Ptr  createESFDescriptor(std::vector<float> v) {
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile("data.pcd", *cloud);
    std::cout << "size: " << cloud->size() << std::endl;
    pcl::ESFEstimation<pcl::PointXYZ,pcl::ESFSignature640> esf;
    esf.setInputCloud(cloud);
    pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree (new pcl::search::KdTree<pcl::PointXYZ>);
    esf.setSearchMethod(kdtree);
    pcl::PointCloud<pcl::ESFSignature640>::Ptr esfPointer(new pcl::PointCloud<pcl::ESFSignature640> ());
    printf("dbg1");
    esf.compute(*esfPointer);
    printf("dbg2");
    return esfPointer;
}

你的 kdtree 没有输入,在 pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree (new pcl::search::KdTree<pcl::PointXYZ>); 下添加kdtree.setInputCloud (cloud);

查看官方教程:http://pointclouds.org/documentation/tutorials/kdtree_search.php#kdtree-search