Set pointer to pointer data in c++ -


im stuck in creation function should return struct containing pointers pointers. problem don't access data :/

the problem like:

struct openglmodel {      struct subm     {          vec3*      positions;         vec3*      normals;          int        nbrvertices;          int        nbrtriangles;         int*       triangleindices;     };      dim_type  submodelcount;     subm*     submodel; } 

the function constructing model by:

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 , 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;  } 

the submodels containing correct data model.submodel not. how can model access data in vectors? seems wrong in last for-loop..

why you're accessing:

 model.submodel[i] 

when of type:

subm*     submodel; 

you're accessing memory not supposed accessed.

on side note, code overcomplicated , dangerous. can cut of pointers, don't need.

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>; 

becomes

std::vector<openglmodel::subm> submodels;     std::vector<vec3> positions; std::vector<vec3> normals; 

and structure

struct openglmodel {      struct subm     {          vec3 positions;         vec3 normals;         int  nbrvertices;          int        nbrtriangles;         std::vector<int> triangleindices;     };      dim_type  submodelcount;     subm*     submodel; } 

should need reuse existing vectors , not copy them around, can use reference vector , initialize in constructor's initialization list.


Comments