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
相关产品推荐
相关产品推荐

