Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 纳米法兰findNeighbors上升段故障_C++_Class_Kdtree_Flann - Fatal编程技术网

C++ 纳米法兰findNeighbors上升段故障

C++ 纳米法兰findNeighbors上升段故障,c++,class,kdtree,flann,C++,Class,Kdtree,Flann,因此,我有以下类KdTree: #包括 #包括 #包括 #包括 #包括 #包括 #包括 结构点云 { 结构点 { 双x,y,z; }; std::向量pts; 内联大小kdtree获取点计数常量{return pts.size();} 内联双kdtree_get_pt(常量大小\u t idx,常量大小\u t dim)常量 { if(dim==0)返回pts[idx].x; else if(dim==1)返回pts[idx].y; else if(dim==2)返回pts[idx].z; }

因此,我有以下类KdTree:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构点云
{
结构点
{
双x,y,z;
};
std::向量pts;
内联大小kdtree获取点计数常量{return pts.size();}
内联双kdtree_get_pt(常量大小\u t idx,常量大小\u t dim)常量
{
if(dim==0)返回pts[idx].x;
else if(dim==1)返回pts[idx].y;
else if(dim==2)返回pts[idx].z;
}
模板
bool kdtree_get_bbox(bbox&/*bb*/)const{return false;}
};
void generatePointCloud(点云和点,常量标准::向量和给定)
{
point.pts.resize(给定.size());
对于(size_t i=0;ibuildIndex();
}
大小(常数std::vector&pt)常数{
双查询_pt[3]={pt[0],pt[1],pt[2]};
const size_t num_results=1;
大小检索索引;
双出区;
nanoflann::KNNResultSet-resultSet(num_结果);
resultSet.init(&ret_index,&out_dist_sqr);
index->findNeighbors(resultSet,&query_pt[0],nanoflann::SearchParams(10));

std::cout我必须深入源代码,找到
KDTreeSingleIndexAdaptor
构造函数的第二个参数(
KdTree
构造函数中的
cloud
)通过引用传递并存储为引用。这意味着您传递给nanoflann的云数据需要保留,直到您删除
kdtreeSingleIndexAdapter
对象

由于您将
PointCloud
声明为
KdTree
构造函数中的局部变量,因此当构造函数结束时,它将被销毁,因为
index
指向的KdTree带有一个悬空的内部引用


一种解决方案是使
cloud
成为
KdTree

的成员,当您使用调试器运行程序时,您看到了什么?@SamVarshavchik在
findNeighbors
上失败,在
KdTree\u get\u pt的第一行出现segfault