我使用 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;