0

实现了“自下而上”的 flatbuffers 编码器后,我收到以下错误消息:

../../flatbuffers-master/include/flatbuffers/flatbuffers.h:804: flatbuffers::uoffset_t flatbuffers::FlatBufferBuilder::ReferTo(flatbuffers::uoffset_t): Assertion `off && off <= GetSize()' failed.

我相信这可能是因为我在将每个都写入flatbuffers::Offset<MyTable>数组后销毁了构建器,因此该表构建器以后不能拥有与它相关的这组函数?拥有一组构建器是解决此错误的最有效方法吗?

目前我正在latbuffers::FlatBufferBuilder使用 my 在创建每个 flatbuffers::Offset 之间清除我,MyTableBuilder因为这阻止了我遇到嵌套错误。

这是我试图理解 flatbuffers 的第三篇文章,感谢您的支持。

4

1 回答 1

0

您不应该清除FlatBufferBuilder: 它负责创建单个缓冲区,并且它必须比位于其中的所有表的所有表构建器都活得更久。如果您清除 a FlatBufferBuilder,您将丢弃任何以前序列化的数据,并且偏移量现在无效。

相反,您应该修复原始的“嵌套错误”。如果您尝试在父表构建器和Finish. 相反,在父表构建器启动之前创建这些项目,保存它们的偏移量,然后才启动父表构建器。

于 2017-01-11T00:45:08.787 回答