При попытке использовать boost::interprocess
для хранения std::vector
в файле отображения памяти я получаю исключение Exception thrown: read access violation.
, когда пытаюсь вернуть загруженный вектор, но только в режиме отладки.
Этот минимальный пример кода (написанный @sehe) получен из https://stackoverflow.com/a/29602884/2741329. , а на MSVC14 происходит сбой в режиме отладки и выполняется более одного раза:
#include <boost/interprocess/managed_mapped_file.hpp>
namespace bi = boost::interprocess;
int main() {
std::string vecFile = "vector.dat";
bi::managed_mapped_file file_vec(bi::open_or_create,vecFile.c_str(), 1000);
typedef bi::allocator<int, bi::managed_mapped_file::segment_manager> int_alloc;
typedef std::vector<int, int_alloc> MyVec;
MyVec * vecptr = file_vec.find_or_construct<MyVec>("myvector")(file_vec.get_segment_manager());
vecptr->push_back(rand());
}
РЕДАКТИРОВАТЬ:
Это сообщение об ошибке Visual Studio:
Здесь точка, где происходит исключение:
Это стек вызовов (нажмите на картинку, чтобы увеличить):
open_or_create
довольно сбивает с толку. Это лучше всегда создавать или у вас будет плохой день. Если IPC не является намерением, истинное намерение становится довольно загадочным. Простой std::vector уже использует файл с отображением памяти без какой-либо помощи. Файл подкачки. Не делай этого. - person Hans Passant   schedule 14.07.2018bi::allocator
не управляет размещением данных элемента в ммф? - person gmas80   schedule 14.07.2018open_or_create
, но это явно не проблема и не имеет отношения к вопросу). Для OP: я посмотрю на этот слой, когда буду рядом с компьютером. (Вы случайно не запускаете несколько копий одновременно?) - person sehe   schedule 14.07.2018boost::interprocess
здесь: github.com/boostorg/ межпроцессный/проблемы/58 . (Я не запускаю несколько копий одновременно) - person gmas80   schedule 14.07.2018