作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最小可重现错误:
int main( int argc, char** argv)
{ //std::cout << "initial area_seg" << std::endl;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>() );
if (pcl::io::loadPCDFile<pcl::PointXYZRGB> (argv[1], *cloud) == -1){
PCL_ERROR ("Couldn't read the input file \n");
return (-1);
}
std::cout << "floor cloud" << std::endl;
pcl::PointCloud<pcl::PointXYZRGB> cloud_cut;
//custom void func that takes cloud in, and returns(by reference) cloud_cut
area_seg(-5,5,.15,5,-5,5,cloud, cloud_cut, "null");
pcl::PointCloud<pcl::PointXYZRGB>::Ptr floor_cut(&cloud_cut);//Fault HERE
return 0;
}
根据使用GBD的trace,command到达return 0;但出于某种原因,此时“step”将控制权带回到已经解除分配的上一行(通常是任何 Cloud::Ptr 声明)。我不确定这是因为它超出了范围,还是因为智能指针在返回时删除了它们,或者这些知识是否对我有帮助。 segFault 是一个 Double free 错误。我相信它正在被解除分配,因为它超出了范围,然后智能指针正在尝试清理。我在这里错过了什么?为什么会这样?我怎样才能避免这种情况?如果你不能回答这个问题,有没有办法判断一个对象何时被释放(运行什么代码来释放)?我确保编译器优化关闭,以确保代码线性运行。
最佳答案
可能发生的事情是 cloud_cut
被破坏了两次。
这一行在栈上分配了cloud_cut
,当main函数返回时会被销毁:
pcl::PointCloud<pcl::PointXYZRGB> cloud_cut;
同样,当这个智能指针被销毁时,它也会触发它所指向的对象的销毁:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr floor_cut(&cloud_cut)
因此,首先在堆上构造对象。
关于c++ - 使用 PointCloudLibrary 混淆 segFault 跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656988/
最小可重现错误: int main( int argc, char** argv) { //std::cout ::Ptr cloud(new pcl::PointCloud() );
我是 PCL 的新手,我想从 pcl::octree 中的 branch 节点获取所有索引。因此,例如根节点应提供每个单独的索引,每个子分支节点应提供该分支节点内所有叶节点的点的索引。实现这一目标的最
我是一名优秀的程序员,十分优秀!