
Hello, I have a problem retrieving objects from a map placed in shared memory. I have two processes: proc#1: creates the shared memory, puts a map into it and populates it with objects proc#2: connects to the shared memory and tries to read out the objects from the map Whenever I try to read out the objects from the map, I get zeroes for the internal members (a, b). The class definition for the objects: -------------------------------------------------- class ShmNode { private: int a; int b; public: ShmNode(); ShmNode(int newa, int newb); ~ShmNode(); void set(int newa, int newb); int getA(); int getB(); }; -------------------------------------------------- I'm posting the source codes for the two programs. I removed the synchronization stuff with semaphores for the sake of clarity: Proc#1: -------------------------------------------------- #include <boost/shmem/named_shared_object.hpp> #include <boost/shmem/allocators/allocator.hpp> #include <boost/shmem/containers/vector.hpp> #include <boost/shmem/containers/map.hpp> #include <boost/shmem/sync/named_semaphore.hpp> #include <iostream> #include "../shmem/ShmNode.hpp" typedef std::pair< const int, ShmNode*> MyPair; typedef boost::shmem::allocator < MyPair, boost::shmem::named_shared_object::segment_manager> MyAlloc; typedef boost::shmem::map< const int, ShmNode*, std::less<const int>, MyAlloc> MyMap; int main() { boost::shmem::named_shared_object segment; segment.create("/myshmem", 20000); MyAlloc nodesAlloc(segment.get_segment_manager()); std::less<const int> comparator; MyMap *table = segment.construct<MyMap>("table")(comparator, nodesAlloc); MyPair myPair1(1, new ShmNode(1,2)); MyPair myPair2(2, new ShmNode(3,4)); MyPair myPair3(3, new ShmNode(5,6)); table->insert(myPair3); table->insert(myPair1); table->insert(myPair2); return 0; } -------------------------------------------------- Proc#2 -------------------------------------------------- /* same includes */ /* same typedefs */ int main() { boost::shmem::named_shared_object segment; segment.open("/myshmem"); MyMap *table = segment.find<MyMap>("table").first; std::cout << "table size: " << table->size() << std::endl; MyMap::iterator iter; for (iter = table->begin(); ; iter++) { if (iter == table->end()) break; std::cout << iter->second->getA() << " " << iter->second->getB() << std::endl; } return 0; } -------------------------------------------------- The problem once again: in proc#2, iter->second->getA() and iter->second->getB() return 0. If I put the same loop into proc#1, the correct values are returned. As a further hint, the size of the map object in proc#2 is returned correctly (=3). What am I doing wrong? Regards, Szilard