C++ 内存映射数据未正确提交

C++ 内存映射数据未正确提交,c++,boost,C++,Boost,我已经写了一段代码,我在一个二进制文件中写了一个映射,而不是使用boost内存映射读取它,但是每当我显示结果时,它是不正确的,它只显示值为 185279552 。我该怎么办?这是我的密码: #include <iostream> #include <vector> #include <utility> #include <fstream> #include <utility> #include <fstream> #incl

我已经写了一段代码,我在一个二进制文件中写了一个映射,而不是使用boost内存映射读取它,但是每当我显示结果时,它是不正确的,它只显示值为

185279552

。我该怎么办?这是我的密码:

#include <iostream>
#include <vector>
#include <utility>
#include <fstream>
#include <utility>
#include <fstream>
#include <iterator>
#include <string>
#include <boost/interprocess/file_mapping.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <iostream>
#include <fstream>
#include <boost/serialization/map.hpp>

using namespace boost::archive;
using namespace boost::interprocess;
void save()
{
    {
        std::ofstream file{"archive1.bin"};
        text_oarchive oa{file};
        std::map<int,int> m;
        m[3] = 9;  
        oa << m;
    }
}

void load()
{
    file_mapping fm("archive1.bin", read_only);
    mapped_region region(fm, read_only);
    int * m = (int *)region.get_address();
    std::cout<<m[3]<<std::endl;
}

int main()
{
  save();
  load();
} 
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间boost::archive;
使用名称空间boost::interprocess;
作废保存()
{
{
std::of流文件{“archive1.bin”};
text_oarchive oa{file};
std::map m;
m[3]=9;

oa问题在于您没有向您认为正在编写的
archive1.bin
写入内容。这可以通过添加以下行来说明:

text_oarchive oa2 {std::cout};
oa2 << m;
然后你会看到:

6e6f6974

它是ASCII
noit
,即
archive1.bin
中的第四个整数

所有这些都是对john在上面评论中所说内容的冗长表述


.

当您尝试调试程序时,您的发现是什么?我找不到任何东西,它没有显示错误或警告MSG。现在我对您在这里使用的库知之甚少,但我很惊讶您认为您可以将
std::map
序列化为一个文件,然后像读取数组一样将其读回。这对我来说似乎是可疑的me.那么,如何使用内存映射正确地写入和读取此值?@asdf您的外部问题是什么?因为您尝试执行的操作似乎不合理,并且可能有一种合理的方法来解决您遇到的任何问题。您尝试使用一种方法写入数据,然后使用一种完全不相关的方法将其读回,而这种方法是正确的这是行不通的。就像让一个西班牙作家写一本书,然后让一个说法语的人试着去读。你为什么希望它对他们有意义呢?Boost序列化和内存映射数组是完全不相关的。好吧,对于3d计算机视觉项目来说,编写映射值是为了在阅读时保存对象的模式对于在另一个程序中发生的模式匹配,但现在我正在测试函数,因此…为此,我将使用键和值作为字符串。那么我如何编写它们呢?
std::cout << std::hex << m[3] << std::endl;