当我试图将vec3指针推送到一个向量时,我遇到了读取访问违规的错误。以下是我的代码和错误信息。
struct Mesh_Data
{
std::vector <glm::vec3*>* vertices;
std::vector<glm::vec3*>* faces;
};
he::Mesh_Data* meshData = new he::Mesh_Data;
glm::vec3* test = glm::vec3(0, 0, 0);
meshData->faces->push_back(test); // program breaks on this line
错误信息:
错误信息: ****抛出的异常: 读取访问违规._My_data 是0xFFFFFFFFFFFFFFE7.发生******的。
请问如何解决这个问题,是什么原因造成的(如果你有时间解释一下在mechine上发生了什么,那就太好了!)。)
我想可能是因为新分配的meshData指针没有被初始化。但在这种情况下,我不知道如何初始化它,我只是想给它添加vec3指针。
谢谢你。
如果你不使用指针的话,你的代码就可以用了。为什么要用指针?
struct Mesh_Data
{
std::vector<glm::vec3> vertices;
std::vector<glm::vec3> faces;
};
he::Mesh_Data meshData;
glm::vec3 test = glm::vec3(0, 0, 0);
meshData.faces.push_back(test);
因为它的主要目的是 vector
是为了避免处理指针的复杂性,指向一个向量的指针是毫无意义的。指针的向量有时是有意义的,但即使如此,你通常最好使用智能指针而不是 "原始 "指针。
你使用的不是向量的inited指针,这就是问题所在。
struct Mesh_Data
{
std::vector <glm::vec3*> vertices;
std::vector<glm::vec3*> faces; // you used a pointer to vector
};
he::Mesh_Data* meshData = new he::Mesh_Data;
glm::vec3* test = glm::vec3(0, 0, 0);
meshData->faces.push_back(test); // faces is a stack object and push_back is allowed