Вы выделяете новую память с помощью mmap
(почему? Кажется плохой идеей ...), но вы не инициализируете свой map
.Используйте «размещение нового» для его инициализации.
void *p = mmap(....);
if (p == MAP_FAILED)
abort();
map<string,string> *b = new(p) map<string,string>();
b->insert(...);
Но я подозреваю, что что-то ужасно неправильно, и mmap
действительно не должно быть здесь ...
Править: Из комментариев кажется, что вы хотите разделить память между двумя процессами.Общая память, вероятно, далеко за пределами вашего текущего уровня навыков.Обычно вы не можете поместить объект std::map
в сегмент общей памяти, поскольку он будет содержать ссылки на внутренние объекты в куче, которые не будут использоваться совместно, если только вы не можете создать собственный распределитель для создания только подобъектов внутри сегмента общей памяти.
Вы можете создать объект общей памяти с помощью shm_open
, вы можете изменить его размер с помощью ftruncate
, и вы можете отобразить его в памяти с помощью mmap
.Различные процессы, которые shm_open
имеют одно и то же имя, получат один и тот же объект, и дескриптор общего объекта также может передаваться между процессами, как файловые дескрипторы.