boost共享内存对象中的指针
pointer in boost shared memory object
我正在处理boost::interprocess::shared_memory_object
,我试图实现的是这样的。
我定义了自己的类SharedMemory
,其中有一个方法称为CCD_ 3,其创建存储器块。我需要在这个内存块中保留三个数组Foo a1[SIZE], Foo a2[SIZE]
和Foo a3[SIZE]
,这样我就可以一致地向它们写入数据。Foo
是我自己定义的类。要访问这三个数组,我需要在处理过程中获取它们的地址。所以我将三个指针Foo *p1, *p2, *p3
传递给这个方法来记录它们的地址。在这个方法中一切都很顺利,但一旦它退出这个方法,p1, p2, p3
就会指向错误的地址。有人能帮忙吗?
// Foo.h
class Foo
{
double f[MAX_SIZE];
char c[MAX_SIZE];
}
// SharedMemory.cpp
void SharedMemory::CreateSharedMemory(Foo *p1, Foo *p2, Foo *p3)
{
boost::interprocess::shared_memory_object shm
(boost::interprocess::create_only
,"foo" //name
,boost::interprocess::read_write
);
shm.truncate(blockSize);
//Map the whole shared memory in this process
boost::interprocess::mapped_region region(shm, boost::interprocess::read_write);
//Write all the memory to 0
memset(region.get_address(), 0, region.get_size());
// assign address
p1 = static_cast<Foo *>(region.get_address());
p2 = static_cast<Foo *>(region.get_address() + blockSize / 3);
p3 = static_cast<Foo *>(region.get_address() + 2 * blockSize / 3);
// p1, p2, p3 point to the correct address here
}
// p1, p2, p3 point to the wrong address once it steps out CreateSharedMemory()
必须传递对Foo指针的引用。类似:
void SharedMemory::CreateSharedMemory(Foo* & p1, Foo* & p2, Foo* &p3)
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它