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

Posted

技术标签:

【中文标题】调试错误 - 向量下标超出范围 - PCL【英文标题】:Debug error - vector subscript out of range - PCL 【发布时间】:2014-05-19 20:06:55 【问题描述】:

我在下面的代码 sn-p 中的两次打印之间收到“调试断言失败”错误消息,其中显示“向量下标超出范围”。我在 64 位机器上使用 PCL 1.7.1,Win7 和 VS2010。

问题是,这是随机发生的,我不知道该怎么做。我该如何调试这样的事情,因为这看起来像是点云库 (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;

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我遇到了同样的问题,这似乎并没有解决问题。还有其他建议吗?

以上是关于调试错误 - 向量下标超出范围 - PCL的主要内容,如果未能解决你的问题,请参考以下文章

调试断言失败,向量下标超出范围

调试断言失败(向量下标超出范围)

(opencv) 调试断言失败,向量下标超出范围

C++ 调试断言失败。向量下标超出范围

如何在 Linux 上强制执行向量下标超出范围调试断言

错误向量下标超出范围