Flatbuffers:访问冲突:Endian 标量

Flatbuffers: Access Violation: Endian Scalar

https://pastebin.com/1cZ8M5Zk

架构:

/* Model.fbs
namespace Resource.Model;

struct Vec3 {
x:float;
y:float;
z:float;
}

struct Vec2 {
x:float;
y:float;
}

table MeshData {
Position:[Vec3];
Normal:[Vec3];
TexCoords:[Vec2];
Tangent:[Vec3];
Bitangent:[Vec3];
}

table VertexObject {
MData:MeshData;
Indices:[uint];
MatNameHash:uint;
}

table Model {
Name:uint;
Meshes:[VertexObject];
}

root_type Model;
*/

建筑物:

//....
auto a = builder.CreateVectorOfStructs(Positions);
auto b = builder.CreateVectorOfStructs(Normals);
auto c = builder.CreateVectorOfStructs(TexCoords);
auto d = builder.CreateVectorOfStructs(Tangents);
auto e = builder.CreateVectorOfStructs(Bitangents);

auto f = CreateMeshData(builder, a, b, c, d, e);


auto g = builder.CreateVector<uint32_t>(Indices);

unsigned int h = 1024; //Hash of Name of Material

std::vector<flatbuffers::Offset<VertexObject>> VO;
auto i = CreateVertexObject(builder, f, g, h);
auto i2 = CreateVertexObject(builder, f, g, h);

VO.push_back(i);
VO.push_back(i2);

auto j = builder.CreateVector(VO);
//...

正在加载:

auto test = GetModel(data);


assert(test->Name());
auto name = test->Name();

assert(test->Meshes());
auto FBMeshes = test->Meshes();


for (unsigned int i = 0; i < FBMeshes->size(); i++)
{
    assert(FBMeshes->Get(i));
    auto FBMeshesIndex = FBMeshes->Get(i);


    //assert(FBMeshesIndex->MData());
}

我尝试在 Flatbuffers 中调用 Table Vector 时遇到访问冲突。包括架构和源代码。我认为这与组件如何为 MeshData Table 一起序列化有关,但我无法弄清楚确切位置。当我尝试 运行 assert(FBMeshesIndex->​​MData()); 时出现错误即Root->Vec:Tables()->Get(i)->Vec:Tables()其中包含了几个Vec of Structs.

TestBed.exe!flatbuffers::ReadScalar(const void * p) Line 219 C++ Symbols loaded. TestBed.exe!flatbuffers::Table::GetOptionalFieldOffset(unsigned short field) Line 1866 C++ Symbols loaded. TestBed.exe!flatbuffers::Table::GetPointer(unsigned short field) Line 1878 C++ Symbols loaded. TestBed.exe!flatbuffers::Table::GetPointer(unsigned short field) Line 1885 C++ Symbols loaded. TestBed.exe!Resource::Model::VertexObject::MData() Line 180 C++ Symbols loaded. TestBed.exe!main() Line 147 C++ Symbols loaded. [External Code] Annotated Frame

代码看起来没问题,所以问题可能出在所显示的代码之外,即 data 如何从构建到使用。

name的值是1024吗? FBMeshes->size() 是 2 吗?此外,在访问它之前,您应该 运行 在 data 上进行验证,以查看数据的传递方式是否存在任何问题。