【发布时间】:2016-02-23 07:47:23
【问题描述】:
我目前正在使用 Boost 库来创建一个简单的 IPC。 我决定将 shared_memory_object 的创建和结构的分配外包给一个函数。 这是我的函数连接:
shared_data* connect(char *name){
//open or create shared memory object
shared_memory_object shm_obj(open_or_create, name, read_write);
offset_t size;
shm_obj.get_size(size);
shared_data * data;
//newly created
if(size == 0){
//set size
shm_obj.truncate(sizeof(data));
//map region to process
mapped_region region(shm_obj, read_write);
//get adress from region
void * addr = region.get_address();
//save structure to memory
data = new (addr) shared_data;
return static_cast<shared_data *>(addr);
//or return data;
}
调用者:
shared_data * data = connect("shared_memory");
在主函数中。
但是,一旦程序通过 return 语句离开函数,我的调试器就会显示,结构中的所有值都不再可访问。 (无法读取内存)
内存地址是正确的,我的调用行也收到了这个内存地址,但是一旦任何其他函数想要使用变量数据,它就会抛出访问冲突错误。
我完全不知道如何解决这个问题。我已经尝试在任何地方创建我的对象,然后将其移动到想要的地址。
如果你们能帮助我,那就太好了!
【问题讨论】: