如何修复向量指针回推时的读取访问违规行为 c++++

问题描述 投票:0回答:1

当我试图将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指针。

谢谢你。

c++ pointers vector graphics new-operator
1个回答
3
投票

如果你不使用指针的话,你的代码就可以用了。为什么要用指针?

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 是为了避免处理指针的复杂性,指向一个向量的指针是毫无意义的。指针的向量有时是有意义的,但即使如此,你通常最好使用智能指针而不是 "原始 "指针。


0
投票

你使用的不是向量的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
© www.soinside.com 2019 - 2024. All rights reserved.