pcl程序如何在linux上运行,如何在linux中将pcl读取的点云数据写入共享内存?

如题:如何在linux中将pcl读取的点云数据写入共享内存?

我尝试了使用shmat 函数连接到我设置的Ponitcloud中

typedef pcl::PointXYZ PointT;

typedef pcl::PointCloud PointCloud;

PointCloud::Ptr output (new PointCloud());

output = (PointCloud::Ptr)shmat(shmid, NULL, 0);

报错::

pcl程序如何在linux上运行,如何在linux中将pcl读取的点云数据写入共享内存?_第1张图片

思考:是shmat返回shmaddr的地址无法直接赋值给pcl创建的指针,pcl创建的指针是boost::shared_ptr类型,是const类型,无法改变内存地址。

需要用第三方的空指针传递数据。

答:pcl::PointCloud<:pointxyz>指针是const指针,创建需要初始化,同时不能改变其指针地址。需要重新定义指针类型。

———————————————————————8/25—————————————————————————

发现了新的点云类型

PointCloud output;//非指针点云

//使用PointCloud进行转换

PointCloud* o = &output;

int sizecloud=sizeof(cloud)+3*8*cloud.points.size();

std::cout<

int shmid = shmget((key_t)7234, sizecloud , IPC_CREAT|0666);

o = (PointCloud*)shmat(shmid, NULL, 0);

std::cout<

<

pcl::copyPointCloud(output, *o);

std::cout<

<

pcl程序如何在linux上运行,如何在linux中将pcl读取的点云数据写入共享内存?_第2张图片

现在发现一个问题是pcl的在为pointcloud指针使用了struct创建结构,同时创建了留空指针。同时C++指针是不能留空,自动分配,在共享内存里了非本进程的指针地址,共享指针就会指向错误内存区(0xffffffff...)。产生段错误。

但是进一步报错是malloc.c文件并没有被生成

1.猜测是因为在调试其中没有足够权限。

2.malloc.c函数本身是c动态内存分配的文件,错误出在这个地方有可能是某个不知道的地方出错了。

答:共享内存区创建在了满溢区域,内存不足,导致内存分配出错。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本问题答案在下方评论本人已给出

你可能感兴趣的:(pcl程序如何在linux上运行,如何在linux中将pcl读取的点云数据写入共享内存?)