Boost序列化断言失败。

5
我使用boost的二进制序列化,一直运行良好,但现在我有一个指针的std::list需要进行序列化输出(oarchive),但是在对象的serialize()函数中,序列化失败,并显示了MSVC对话框:
R6010 -abort() has been called
并且控制台窗口打印出这样的字符串:
Assertion failed: 0 == static_cast(t) || 1 == static_cast(t), file c:\program files\boost\boost_1_44\boost\archive\basic_binary_oprimitive.hpp, line 91
这是什么意思?
该项目比较庞大,源代码分布式存储,因此我无法在此处发布其代码,但我尝试在简单项目中模拟此错误 - 在那里它可以正常工作,这很奇怪。
P.S. 我使用Windows XP上的MSVC2010EE和boost 1.44。当我在“Debug Error!”窗口上单击“重试”时,调试器会在序列化 archive << myList;行旁边的代码行上显示箭头 - 我的意思是似乎在某个析构函数或其他地方发生了错误。 当我更改对象的serialize()函数内部时,只有在重新编译整个项目(clean before compiling)后才会应用这些更改 - 但是如果我只是编译它(其中IDE显示包括已更改的头文件的所有源代码都已重新编译) - 自最后一次版本以来,运行时不会发生任何更改(我用printf()试过) - 这很奇怪。 我是否可能偶然地设置了某些关键定义或其他内容?

没有代码很难提供帮助。你能否将其简化为一个小的可重现的示例并在此处包含它? - Sam Miller
如果你向上追溯调用栈,最终你会找到一个点,可以弄清楚问题的原因,例如,结构体中的哪个字段导致了问题。 - jrh
1个回答

9
这句话是:“所关注的行为:”
// trap usage of invalid uninitialized boolean which would
// otherwise crash on load.

看起来你尝试序列化一个未初始化的bool。没有更多的代码,我们无法帮助你找到是哪个。


真的有bool!就在崩溃前! - Slaus
嗯,那我该怎么办呢? #include <boost/serialization/bool.hpp>?- 没有这个文件。 - Slaus
4
这意味着你只是声明了变量 bool tmp; 而没有初始化它:bool tmp = 0; - karlphillip
在某些平台上(例如MacOSX),当浮点数未初始化时会出现类似的问题。如果您计划序列化一个变量,请检查是否在构造函数中给它赋了默认值。 - Tymek
根据karlphillip的帖子提供的额外信息:https://dev59.com/jHnZa4cB1Zd3GeqPsaCV - Anonymous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接