2017-01-10 3 views
0

は私の『ボトムアップ』flatbuffersエンコーダを実装した失敗した私は、次のエラーメッセージが出ます:Flatbuffers:アサーション `オフ&&オフが<=のgetSize()」

../../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を各フラットバッファ::オフセットの作成の間にクリアしています。これは、MyTableBuilderを使用して、ネストエラーが発生しないようにしています。

これはフラットバッファを理解しようとする私の3番目の投稿です。私はあなたのサポートに感謝しています。

+3

エラーに加えて何をしているのかを示すコードを追加すると、かなり役に立ちます。 – tadman

答えて

0

FlatBufferBuilderをクリアするべきではありません。単一のバッファーの作成を担当し、その中に入るすべてのテーブルのすべてのビルダーを使い切る必要があります。 FlatBufferBuilderをクリアすると、以前にシリアル化されたデータが破棄され、オフセットが無効になります。

代わりに、元の「ネスティングエラー」を修正する必要があります。親テーブルビルダの先頭と、Finishの間に文字列、ベクトル、およびサブテーブルを作成しようとすると、ネスティングエラーが発生します。代わりに、親テーブルビルダの開始前にそれらのアイテムを作成し、オフセットを保存してから、親テーブルビルダを開始します。

関連する問題