C++使用PCL注册内存以及释放

最近测试中发现,电脑运行一定时间就会重启,检查后发现其实是内存被占满了,然后电脑就卡住,这时会有两种情况:

  • 重启
  • 把某些程序kill掉释放内存,这个时候不一定会kill那些占很多内存的程序

然后接着查,发现其实就是处理点云的一个程序,注册了内存地址,没有在使用完后释放掉,所以就一直再不停的注册,导致最后内存爆了。

所以解决方法也很简单,只要记得在注册和使用完后,释放就可以避免这种问题了:

// register memory
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_o (new pcl::PointCloud<pcl::PointXYZ>);

//...

// release memory according to the pointer
cloud_o.reset(new pcl::PointCloud<pcl::PointXYZ>());

记住reset()括号里的点云类型,根据注册的时候类型来定,注册的类型和释放的类型保持一致即可,如pcl::PointXYZIpcl::PointXYZRGBpcl::PointXYZL这些类型。

养成内存管理的习惯,可以避免后期测试中很多奇奇怪怪的问题,有时从现象看本质,真的很难。

你可能感兴趣的:(PCL,Learning,c++,PCL)