【发布时间】:2011-02-23 14:41:07
【问题描述】:
我使用了 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
这是什么意思?
项目很大,源代码是分布式的,所以我不能在这里发布它的代码,但我试图在简单的项目中模拟这个错误 - 奇怪的是它工作正常。
附:我在 Windows XP 上将 boost 1.44 与 MSVC2010EE 一起使用。当我单击“调试错误!”窗口上的“重试”时,调试器在代码行 next 上显示箭头以序列化archive << myList; 行 - 我意味着似乎在某些析构函数或其他东西上发生了错误。
当我在对象 serialize() 函数中进行更改时-它们将仅在我重建整个项目时应用(编译前清理)-但如果我只是编译它(IDE 显示包含更改的标头的所有源都被重新编译)-没有更改自上一个版本以来将在运行时发生(我尝试使用 printf()) - 这很奇怪。
我可以偶尔设置一些重要的定义吗?
【问题讨论】:
-
在没有任何代码的情况下很难提供帮助。你能把它归结为一个可重复的小例子并在这里包含它吗?
-
如果你最终向上调用堆栈,你将到达可以找出导致问题的原因的地步,例如。结构中的哪个字段
标签: c++ serialization boost assert assertion