2017-01-07 3 views
0

Я просто использую boost :: interprocess :: managed_shared_memory для создания общего вектора в памяти, я успешно создал общую память, я нахожу, когда читаю вектор, нормально читать и напечатайте все элементы в векторе в комментарии 1, но, выходя из области инициализации вектора g/gr, а именно, в основной функции, я больше не могу получить доступ к векторному контенту, программа сообщает ошибку с отображением адреса, но адрес - это то же, так почему? может ли кто-нибудь ответить? Благодаря!Boost :: interprocess managed_shared_memory указатель эффективная область

#include <boost/interprocess/managed_shared_memory.hpp> 
#include <boost/interprocess/containers/vector.hpp> 
#include <boost/interprocess/allocators/allocator.hpp> 

typedef boost::interprocess::allocator<boost::interprocess::vector<int>, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator; 
typedef boost::interprocess::vector<boost::interprocess::vector<int>, ShmemAllocator> Shmem2DVector; 

class TestVector{ 
public: 
    Shmem2DVector *g; 
    Shmem2DVector *gr; 

    TestVector{ 
     boost::interprocess::managed_shared_memory segment(boost::interprocess::open_only, "shmem"); 
     g = segment.find<Shmem2DVector>("myVector").first; 
     gr = segment.find<Shmem2DVector>("myVector").first; 

     //1. print vector g/gr and size of vector g/gr 
    } 
}; 

int main(){ 
    TestVector test_vec(); 
    //2. print vector g/gr and size of vector g/gr 
    return 0; 
} 

ответ

0

Как только вы покинете конструктор, объект managed_shared_memory будет уничтожен. Попытайтесь изменить определение своего класса следующим образом:

class TestVector 
{ 
public: 
    Shmem2DVector *g; 
    Shmem2DVector *gr; 

    TestVector() 
     : segment(boost::interprocess::open_only, "shmem") 
    { 

     g = segment.find<Shmem2DVector>("myVector").first; 
     gr = segment.find<Shmem2DVector>("myVector").first; 
    } 

private: 
    boost::interprocess::managed_shared_memory segment;   
}; 
Смежные вопросы