void QtWidgetsApplication2::pt_clicked(QString data1, QString data2) { pcl::console::TicToc time; // --------------------------------读取点云------------------------------------ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ>("opened_cloud.pcd", *cloud) == -1) { PCL_ERROR("Cloudn't read file!"); } //cout << "滤波前点的个数为:" << cloud->size() << endl; // --------------------------------直通滤波------------------------------------ float a = data1.toFloat(); float b = data2.toFloat(); pcl::PointCloud<pcl::PointXYZ>::Ptr filtered(new pcl::PointCloud<pcl::PointXYZ>); std::string fv = "z"; // 滤波字段 filtered = pcl_filter_passthrough(cloud, a, b, fv); //cout << "直通滤波用时:" << time.toc() << " ms" << endl; pcl::io::savePCDFileASCII("opened_cloud.pcd", *filtered); ui.textBrowser->clear(); QString Pointsize = QString("%1").arg(cloud->points.size()); ui.textBrowser->insertPlainText(QStringLiteral("点云数量:") + Pointsize); QString Pointsize1 = QString("%1").arg(filtered->points.size()); ui.textBrowser->insertPlainText(QStringLiteral("\n滤波后点云数量:") + Pointsize1); auto renderer2 = vtkSmartPointer<vtkRenderer>::New(); auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); renderWindow2->AddRenderer(renderer2); viewer.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer", false)); ui.openGLWidget->setRenderWindow(viewer->getRenderWindow()); viewer->setupInteractor(ui.openGLWidget->interactor(), ui.openGLWidget->renderWindow()); viewer->setBackgroundColor(0, 0, 0); //设置背景 pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(filtered, "z"); viewer->addPointCloud<pcl::PointXYZ>(filtered, fildColor, "sample cloud"); viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud"); viewer->resetCamera(); update(); };找出这段代码中释放的一个无效的堆内存指针或已被释放过的指针
时间: 2023-09-26 14:09:06 浏览: 86
其它控件VC源代码:date_time_picker3_demo_CE
这段代码中并没有明显释放无效的堆内存指针或已经被释放过的指针。
但是,需要注意的是,在函数开头创建的 `pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);` 和在函数中创建的 `pcl::PointCloud<pcl::PointXYZ>::Ptr filtered(new pcl::PointCloud<pcl::PointXYZ>);` 都是通过 `new` 运算符在堆上动态分配内存的。这意味着必须在使用完这些指针后正确地释放它们,以避免内存泄漏。
在这段代码中,似乎没有看到释放这些指针的代码。因此,在函数结束之前,应该加上 `delete` 运算符释放这些指针,例如:
```cpp
delete cloud;
delete filtered;
```
阅读全文