Привет всем! Хочется странного: есть процесс, создающий boost::interprocess::managed_shared_memory и размещающий там смартпоинтеры на объекты(в листинге назвал my_type), которые тоже размещаются в общей памяти. Так же есть другие процессы, которые должны получать доступ к вектору на чтение и запись. Код процесса, создающего вектор: Код (Text): #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/allocator.hpp> #include <boost/interprocess/containers/string.hpp> #include <boost/interprocess/containers/vector.hpp> #include <boost/interprocess/sync/named_mutex.hpp> #include <boost/interprocess/sync/scoped_lock.hpp> #include <boost/interprocess/allocators/node_allocator.hpp> #include <boost/interprocess/allocators/adaptive_pool.hpp> typedef boost::interprocess::managed_shared_memory::segment_manager segment_manager_t; typedef boost::interprocess::node_allocator<void, segment_manager_t> void_allocator; typedef boost::interprocess::node_allocator<char, segment_manager_t> char_allocator; typedef boost::interprocess::basic_string<char, std::char_traits<char>, char_allocator> char_string; namespace ipc = boost::interprocess; typedef vm::My_type my_type; typedef std::tr1::shared_ptr <my_type> my_type_ptr; typedef ipc::node_allocator<machine_ptr, segment_manager_t> my_type_allocator; typedef ipc::vector<machine_ptr, machine_allocator> my_type_vector; typedef boost::container::containers_detail::vector_iterator< ipc::offset_ptr <my_type_ptr> > my_type_it; //Самое интересное boost::interprocess::shared_memory_object::remove("MySharedMemory"); boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only,"MySharedMemory", 65536); void_allocator _alloc_inst(segment.get_segment_manager()); my_type_vector* my_types_vector = segment.construct<my_type_vector>("my_type_vector")(_alloc_inst); // создаем этот вектор, с нужным аллокатором. Процесс, получающий доступ к вектору Код (Text): ipc::managed_shared_memory segment(boost::interprocess::open_only,"MySharedMemory"); void_allocator _alloc_inst(segment.get_segment_manager()); my_type_vector* my_types_vector = segment.find<my_type_vector>("my_type_vector").first; // вот на этом падает Насколько я понял, в моем случае нужно использовать node_allocator, так как есть несколько процессов. С ним процесс падает на строке my_type_vector* my_types_vector = segment.find<my_type_vector>("my_type_vector").first; Если использовать boost::interprocess::allocator то все работает, но местами странно. Работает все это под Linux, компилируется GCC 4.4 с Boost 1.42. Использование Mutex убрал для наглядности. В чем может быть проблема и как её решить?
valhalla Попробуй с последним бустом. Осенью в 1.45 в interprocess было пофикшено мульярт багов (пруф). Ща как раз 1.46.1 только что вышел.