我正在寻找一种在两个进程之间共享 pcl::PointCloud 而不使用磁盘上的文件的方法。特别是,我对使用 boost 共享内存库来实现我的范围很感兴趣。
我刚刚为发件人尝试了以下说明:
void * pSharedMemory = ... ; // from wherever
pcl::PointCloud<pcl::PointXYZ>::Ptr ptr = ... ; // from wherever
memcpy ( pSharedMemory , static_cast<void const*>(ptr.get()) , sizeof(pcl::PointCloud<pcl::PointXYZ>) ) ;
以及接收器的以下内容:
template <typename T> nothing ( T* ) { }
void * pSharedMemory = ... ; // from wherever
pcl::PointCloud<pcl::PointXYZ>::Ptr ptr ( static_cast<pcl::PointCloud<pcl::PointXYZ>*>(pSharedMemory) , ¬hing<pcl::PointCloud<pcl::PointXYZ> > ) ; // sets the destructor to do nothing
发件人似乎可以工作,因为我能够从内存中可视化 PointCloud,但在客户端,对象已正确创建和填充,但是当我尝试访问应该包含点的点属性时出现分段错误云的。所有其他属性(如宽度、高度等)都填充了正确的值。
如何解决此问题并访问积分结构?还是有另一种方法来实现我的范围?