我目前正在尝试使用boost序列化和反序列化对象。我的代码不起作用,所以我简化了示例,我得到了完全相同的结果。我在这做错了什么? Boost显然有效。
包括
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
代码
std::ofstream outStream(fileName);
if(outStream.is_open())
{
boost::archive::binary_oarchive archiveOut(outStream);
archiveOut << 1;
outStream.close();
}
此位调用正常..文件已创建但是它是1.3MB(!?!?!)。那似乎非常错误。
std::ifstream inStream(fileName);
if(inStream.is_open())
{
boost::archive::binary_iarchive archiveIn(inStream);
int value = 0;
archiveIn >> value;
inStream.close();
}
在实例化binary_iarchive之后发生错误,我可以在调试器中跳过此调用,但在下一步中它会崩溃。即在binary_iarchive()之后但在int value = 0之前;
boost::archive::binary_iarchive archiveIn(inStream);
*错误:无法分配区域 * 在malloc_error_break中设置一个断点来调试libc ++ abi.dylib:以std :: bad_alloc类型的未捕获异常终止: 的std :: bad_alloc的
我无法在这里看到我做错了什么。
该项目使用clang构建,并使用XCode开发。
是否存在使用boost二进制序列化的常见问题?
哪些方法可以帮助我理解我在这段代码中做错了什么?
此致
注意:
其他帖子类似,但不完全是这个问题。我在上面的帖子中尝试了解决方案。
Stackoverflow Boost Serialisation Question
更新
bool saveDatabase(std::string fileName)
{
std::ofstream outStream(fileName);
if(outStream.is_open())
{
boost::archive::binary_oarchive archiveOut(outStream);
archiveOut << 1;
outStream.close();
return true;
}
else
{
LOG(INFO) << "ERROR: Could not open file stream to save database";
}
return false;
}
答案 0 :(得分:0)
第一
archiveOut << 1;
您只能使用Boost来序列化左值。 (寻找&#34;堆叠&#34;在http://www.boost.org/doc/libs/1_61_0/libs/serialization/doc/special.html#objecttracking)
下
std::ofstream outStream(fileName);
if(outStream.is_open())
{
outStream << 1;
outStream.close();
return true;
}
这甚至不使用提升。在大多数平台上,该文件将为1个字节。如果没有,那么它没有被写入,或者你正在查看错误的文件。
下
else
{
LOG(INFO) << "ERROR: Could not open file stream to save database";
throw;
}
如果没有待处理的异常,则无法重新抛出。 what does "throw;" outside a catch block do?