2017-01-10 4 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을 사용하여 각 flatbuffers :: Offset을 생성하는 동안 중첩 오류가 발생하지 않기 때문입니다.

이것은 플랫 버퍼를 이해하려고하는 세 번째 게시물이며, 귀하의 지원에 감사드립니다.

+3

오류 이외에 수행중인 작업을 보여주는 코드를 추가하면 상당히 도움이됩니다. – tadman

답변

0

FlatBufferBuilder을 지우지 않아야합니다. 단일 버퍼 작성을 담당하며 내부에있는 모든 테이블의 모든 테이블 작성자를 종료해야합니다. FlatBufferBuilder을 지우면 이전에 일련 화 된 데이터를 버리고 이제는 오프셋이 유효하지 않습니다.

대신 원래 "중첩 오류"를 수정해야합니다. 상위 테이블 빌더 시작 부분과 Finish 사이에 문자열, 벡터 및 하위 테이블을 만들려고하면 중첩 오류가 발생합니다. 대신 상위 테이블 작성기 시작 전에 해당 항목을 만들고 오프셋을 저장 한 다음 상위 테이블 작성기를 시작하십시오.