cereal中Json序列化问题
背景
cereal是一个轻量级的序列化,反序列化的库,可直接集成进C++源码中;最近在项目中使用cereal进行json序列化时发现了一个小问题,导致自己反序列化时总会出现内存越界问题;
问题描述
对需要序列化的类对象,或别的数据时,如果我主动的进行close(读写正常文件养成的习惯),就会使json字符串在最后少输出一个“}”,所产生的问题时反序列化时内存越界;
示例如下:(有兴趣的可以试一下)
spData;//需要序列化的对象 std::shared_par<Data>
std::fstream ofs("dataTest.json", std::ios::out);
cereal::JSONOutputArchive oar(ofs);
oar<<spData;
ofs.close();
解决方法
为序列化过程设定一个作用范围,即加上“{}”即可;
spData;//需要序列化的对象 std::shared_par<Data>
std::fstream ofs("dataTest.json", std::ios::out);
{
cereal::JSONOutputArchive oar(ofs);
oar<<spData;
}
ofs.close();
- 对爬坑的过程做记录,方便自己查询,也希望可以帮到有类似问题的朋友
网友评论