Повышенный управляемый сопоставленный файл std :: unordered_map Linux Ошибка сегментации - PullRequest
1 голос
/ 10 февраля 2020

Я пытаюсь отобразить std :: unordered_map с промежуточным процессом boost. С Windows все отлично работает. На Linux я получаю ошибку сегментации.

    using namespace boost::interprocess;

    struct State {
        uint8_t state = 0;

        State(uint8_t _state) {
            state = _state;
        }
    };

    managed_mapped_file file(open_or_create, "MySharedMemory", 65536);

    typedef uint32_t KeyType;
    typedef State  MappedType;
    typedef std::pair<const KeyType, MappedType> ValueType;
    typedef boost::interprocess::allocator<ValueType, boost::interprocess::managed_mapped_file::segment_manager> UnorderedMapAllocator;
    typedef boost::unordered_map<KeyType, MappedType, boost::hash<KeyType>, std::equal_to<KeyType>, UnorderedMapAllocator> unordered_map;

    unordered_map* map = file.find_or_construct<unordered_map>("fault_states")(3, boost::hash<KeyType>(), std::equal_to<KeyType>(), file.get_segment_manager());

    uint32_t size = (uint32_t)map->size();
    for (uint32_t i = size; i < size + 100; ++i) {
        State state(46);
        map->insert(ValueType(i, state));
    }

    for (auto x : *map) {
        std::cout << x.first << " ";
        std::cout << x.second.state << std::endl;
    }

При первом запуске все работает нормально. На втором прогоне я получаю ошибку сегментации. Если вместо этого я использую boost :: unordered_map, то все работает нормально, но мне нужно использовать стандартную версию

Boost Version 1.6.4 G cc Версия 7.4.0

...