【问题标题】:Boost serialization assertion failBoost 序列化断言失败
【发布时间】: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


【解决方案1】:

有问题的行说:

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

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

【讨论】:

  • 真的有bool!就在崩溃之前!
  • 嗯,那我该怎么办? #include ? - 没有这样的文件。
  • 这意味着你只是声明变量bool tmp;而不初始化它:bool tmp = 0;
  • 它有帮助!非常感谢!
  • 浮动未初始化时,某些平台(例如 MacOSX)会出现类似问题。如果你打算序列化一个变量,请检查你是否在构造函数中给了它一个默认值。
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多