std :: map нельзя десериализовать, если сериализованный std :: map слишком большой - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь десериализовать ранее сериализованный объект std :: map.Однако при сериализации std :: map имеет больше элементов, чем ок.10000 программа вылетает.

#include <iostream>
#include <string>
#include <sstream>

#include <thread>
#include <Python.h>
#include <fstream>
#include <algorithm>
#include <boost/serialization/map.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <map>

constant std::string filename = "Dummy";
constexpr int threshold = 10000;

void SaveMapToFile()
{
    std::ifstream file(filename);
    std::string line; int i = 0;
    while (std::getline(file, line))
    {
        auto place = std::find(line.begin(), line.end(), '\t');
        std::string line2(line.begin(), place);
        std::string line3(place + 1, line.end());
        tMap[line2] = line3;
        i++;
        if (i > threshold) {
            break;
        }
    }
    std::ofstream ss("map.txt");
    boost::archive::binary_oarchive temp(ss);
    temp << tMap;
}

void LoadMapFromFile()
{
    std::cout << "Before loading" << std::endl;
    std::ifstream ss("map.txt");
    boost::archive::binary_iarchive temp(ss);
    std::map<std::string, std::string> tMap2;
    temp >> tMap2;
    std::cout << "After loading" << std::endl;
}

Вывод следующий:

Before loading

И программа останавливается.

Однако, если для порога установлено более низкое значение, например 1000, все работает как положено:

Before loading
After loading

В чем причина такого поведения?

...