提升序列化断言失败

时间:2011-02-23 14:41:07

标签: c++ serialization boost assert assertion

我使用boost的二进制序列化,直到现在它都运行良好。我有std::list指向序列化输出(oarchive)的指针,但序列化在对象的serialize()函数中失败,并带有MSVC的对话框:

R6010 -abort() has been called

并将此类字符串打印到控制台窗口中:

Assertion failed: 0 == static_cast<int>(t) || 1 == static_cast<int>(t), file c:\program files\boost\boost_1_44\boost\archive\basic_binary_oprimitive.hpp, line 91

这是什么意思?

项目非常大,源代码是分布式的所以我不能在这里发布它的代码,但我试图在简单的项目中模拟这个错误 - 它的工作原理很奇怪。

P.S。我在Windows XP上使用 boost 1.44 和MSVC2010EE。当我在“调试错误!”窗口中单击“ retry ”时,调试器会在代码行下一步上显示箭头到序列化archive << myList;行 - 我的意思是似乎错误发生在一些析构函数或其他东西。 当我在对象serialize()函数中进行更改时 - 它们将在我重建整个项目时被应用(在编译之前清理) - 但是如果我只是编译它(IDE​​显示所有包含已更改头的源都被重新编译) - 没有更改将在运行时发生自上一个版本(我尝试使用printf()) - 这很奇怪。 我偶尔会设置一些关键定义吗?

1 个答案:

答案 0 :(得分:9)

有问题的一行说:

// trap usage of invalid uninitialized boolean which would
// otherwise crash on load.

在某些时候,您似乎正在尝试序列化尚未初始化的bool。没有进一步的代码,我们无法帮助您找到哪一个。