从boost mapped\u区域访问数据时出错

从boost mapped\u区域访问数据时出错,boost,out-of-memory,file-mapping,Boost,Out Of Memory,File Mapping,我在访问地图区域数据时遇到一些问题 首先,我定义一个结构:(用于股票报价…) 下面是sample.txt(我也尝试过二进制格式)文件,我想通过bar类型的迭代访问它 89.26 89.47 89.25 89.47 563 89.47 89.56 89.27 89.47 284 89.46 89.56 89.26 89.33 264 使用以下代码,我可以逐个字符读取该字符: file_mapping m_f

我在访问地图区域数据时遇到一些问题

首先,我定义一个结构:(用于股票报价…)

下面是sample.txt(我也尝试过二进制格式)文件,我想通过bar类型的迭代访问它

89.26    89.47    89.25    89.47      563 
89.47    89.56    89.27    89.47      284 
89.46    89.56    89.26    89.33      264 
使用以下代码,我可以逐个字符读取该字符:

file_mapping m_file(filename,read_only); 
mapped_region region(m_file,read_only);
char const* add= static_cast<char*> (region.get_address());
以便我可以通过以下方式访问数据:

myaddr->open (with an offset ). 
例如,现在我想访问第二行的第三个号码,我只需要:

bar* myaddr=(bar*)(region.get_address()), where bar is define as the above..
 (myaddr+1)->high
然而,结果确实是千丝万缕的:

 e.g 1.50656e-189, or sometimes 825303072 for (myaddr+2)->volume
事实上,如果我转换到char以外的任何时间,都会出现这样的错误

问题:如何使用myaddr->访问映射数据而不出错


谢谢,这看起来像一个文本文件。如果将其作为内存映射区域读取,则得到的是文本,而不是双倍文本。这就是你的问题。

所以从文本文件映射是不对的?你建议的格式,我已经试过了。这些都不要work@user3217264:您是否理解包含PI值的
双精度
与文本字符串“3.1415”之间的区别?如果没有,我也帮不了你。
 e.g 1.50656e-189, or sometimes 825303072 for (myaddr+2)->volume