【问题标题】:pointer in boost shared memory objectboost共享内存对象中的指针
【发布时间】:2015-03-03 02:40:05
【问题描述】:

我正在与boost::interprocess::shared_memory_object 打交道,而我想要实现的目标是这样的。

我定义了自己的类SharedMemory,其中有一个方法 称为CreateSharedMemory(),它创建了一个内存块。我需要在这个内存块中保留三个数组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()

【问题讨论】:

    标签: c++ pointers boost shared-memory


    【解决方案1】:

    您必须传递对 Foo 指针的引用。喜欢:

    void SharedMemory::CreateSharedMemory(Foo* & p1, Foo* & p2, Foo* &p3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 2015-02-14
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多