5

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

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

这是什么意思?

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

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

4

1 回答 1

9

有问题的行说:

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

看起来在某些时候您正在尝试序列化bool尚未初始化的 a。如果没有更多代码,我们无法帮助您找到哪一个。

于 2011-02-23T15:29:48.223 回答