You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++环境下Flatbuffers读写二进制文件无法解码问题排查求助

Flatbuffers序列化反序列化失败问题排查

结论

问题出在二进制文件写入逻辑错误,与Schema定义无关。

具体错误点

  • 写入文件参数错误:编码器中wf.write((char*) &buf, size);存在严重错误。buf本身是指向序列化数据缓冲区的指针,对其取地址&buf后实际写入文件的是指针变量自身的内存地址内容,而非你需要的Flatbuffers序列化二进制数据,导致读取后的数据完全非法,因此验证接口VerifyPersonBuffer返回0。
  • 冗余代码(不影响运行,可删除):Schema中Person表仅定义了age字段,没有name字段,编码器中auto name = builder.CreateString("Mr Test");属于无用代码,创建的字符串未加入到序列化结构中,不会影响最终结果但属于冗余逻辑。
  • 解码器逻辑不严谨:VerifyPersonBuffer验证失败返回0后,直接调用GetPerson属于非法访问,后续的"person decoded"输出是未定义行为,存在崩溃风险。

修复方案

将编码器中写入文件的代码修改为:

wf.write(reinterpret_cast<char*>(buf), size);

即可解决核心问题,其余冗余代码和逻辑可根据需求自行优化。

内容的提问来源于stack exchange,提问作者sk patra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:45:05