0

vector3fからデータにアクセス/印刷しようとすると、次のようになりますEXC_BAD_ACCESS

std::cout << myMesh.faces[1].vertices[1].pos.x;

コード:

struct Vector2f{
    float x, y;
};
struct Vector3f{
    float x, y, z;
};

struct ObjMeshVertex{
    Vector3f pos;
    Vector2f texcoord;
    Vector3f normal;
};

struct ObjMeshFace{
    ObjMeshVertex vertices[3];
    ObjMeshFace(){}
    ObjMeshFace(const ObjMeshFace& o)
    {for (int i=0; i < 3; ++i) vertices[i] = o.vertices[i]; }
};

struct ObjMesh{
    std::vector<ObjMeshFace> faces;
};

ObjMesh myMesh;

for(size_t i = 0; i < faces.size(); ++i){
    ObjMeshFace face;
    for(size_t j = 0; j < 3; ++j){
        face.vertices[j].pos        = positions[(faces[i].pos_index[j] - 1)];
        face.vertices[j].texcoord   = texcoords[faces[i].tex_index[j] - 1];
        face.vertices[j].normal     = normals[faces[i].nor_index[j] - 1];
    }
    myMesh.faces.push_back(face);
}

デバッガーは以下を参照しstl_vector.hます:

  reference
  operator[](size_type __n)
  { return *(this->_M_impl._M_start + __n); }

これは何を意味するのでしょうか?範囲外に電話していますか?

4

1 に答える 1

0

しばらく経ちましたが、push_backを実行すると、頂点配列を浅くコピーするだけですvertices[] = vertices[]。ObjMeshFaceにカスタムコピーctorが必要です。そのため、機能しますがvertices[0].pos.x機能しvertices[1].pos.xません。

于 2012-05-30T18:11:51.453 に答える