我坚持创建一个函数,它应该返回一个包含指针指针的结构。问题是我无法访问数据:/
问题是:
struct openGLmodel
{
struct subM
{
Vec3* positions;
Vec3* normals;
int nbrVertices;
int nbrTriangles;
int* triangleIndices;
};
dim_type subModelCount;
subM* subModel;
}
该函数正在通过以下方式构建模型:
openGLmodel createModel(..model data)
{
openGLmodel model;
std::vector<openGLmodel::subM>* subModels = new std::vector<openGLmodel::subM>;
std::vector<Vec3>* positions = new std::vector<Vec3>;
std::vector<Vec3>* normals = new std::vector<Vec3>;
int subModelIndex = 0;
for(...all vertices...)
{
... //extracting positions and normal vectors
positions->push_back(pos);
normals->push_back(normal);
if(positions->size() >= 65536)
{
subModels->push_back(openGLmodel::subM());
subModels->at(subModelIndex).positions = positions->data();
subModels->at(subModelIndex).normals = normals->data();
std::vector<Vec3>* positions = new std::vector<Vec3>;
std::vector<Vec3>* normals = new std::vector<Vec3>;
subModelIndex++;
}
}
...
...
model.subModel = new openGLmodel::subM[subModelIndex]();
for(int i=0; i<subModelIndex; i++)
{
model.subModel[i] = openGLmodel::subM();
model.subModel[i].positions = subModels->data()[i].positions;
model.subModel[i].normals = subModels->data()[i].normals;
}
return model;
}
subModels包含正确的数据,但model.subModel不包含。如何让模型访问向量中的数据?在最后一个for循环中似乎是错误的。
答案 0 :(得分:0)
您访问的原因:
model.subModel[i]
当它只是类型:
subM* subModel;
你正在访问不应该被访问的内存。
另一方面,您的代码过于复杂且危险。 你可以削减你实际上并不需要的大部分指针。
std::vector<openGLmodel::subM>* subModels = new std::vector<openGLmodel::subM>;
std::vector<Vec3>* positions = new std::vector<Vec3>;
std::vector<Vec3>* normals = new std::vector<Vec3>;
变为
std::vector<openGLmodel::subM> subModels;
std::vector<Vec3> positions;
std::vector<Vec3> normals;
和你的结构
struct openGLmodel
{
struct subM
{
Vec3 positions;
Vec3 normals;
int nbrVertices;
int nbrTriangles;
std::vector<int> triangleIndices;
};
dim_type subModelCount;
subM* subModel;
}
如果您需要重用现有的向量而不是复制它们,您可以使用对向量的引用并在构造函数的初始化列表中初始化它。