我的问题如下:
为什么我的程序不能重新附加到共享内存映射?
我在我的程序中执行以下操作(可能更容易使用 boost 页面中的示例,而这只是我程序中的一个小片段):
第一次,初始化它:
m_sharedMemory = new managed_shared_memory(create_only, segmentName.c_str() , 1000000);
m_hashMap = m_sharedMemory->construct<MyHashMap>(segmentName.c_str())( 3, boost::hash<std::string>(), std::equal_to<std::string>() , m_sharedMemory->get_allocator<ValueType>());
第二次“重新附加”
m_sharedMemory = new managed_shared_memory(open_only, segmentName.c_str());
m_hashMap = m_sharedMemory->find<MyHashMap>(segmentName.c_str()).first;
我的问题是,如果插入了 2 个项目,从 find 返回的对象上的 .second 调用将显示“1”,这实际上是错误的,它应该显示 2,在此之后如果我的程序试图在存储的地图中找到任何东西程序崩溃。有没有人已经这样做了。
如果我在初始程序运行中做同样的事情,那么从哈希中查找值是没有问题的。这仅在程序已初始化并且稍后程序重新启动并执行附加并尝试检索以前插入的值时才会发生。
谢谢您的帮助。