【问题标题】:read violation while accessing to a vector which is for an object访问用于对象的向量时读取冲突
【发布时间】:2013-12-28 13:08:08
【问题描述】:

这是一道 C++ 问题。

我正在开发一个 OpenGL 项目。写了一个简单的 OBJ 加载器。我有一个名为Mesh的课程。通过获取一个名为monkey的对象指针

Mesh* monkey;

和调用函数:

load_obj("Monkey.obj", monkey);

我想从文件中读取并将其放在猴子顶点中。 但是在运行时它给了我未处理的异常:当想要回推到向量时读取冲突:

mesh->vertices.push_back(v);

我测试了一个本地向量假人,但它成功推回。不知道为什么不能推送到对象指针向量?

这里是网格标题

include[...]

using namespace std;

class Mesh {
private:
  GLuint vbo_vertices, vbo_normals, ibo_elements;
public:
  vector <glm::vec4> vertices;
  vector <glm::vec3> normals;
  vector <GLushort> elements;
  glm::mat4 object2world;

  Mesh() : vertices(1), normals(1), elements(3), object2world(glm::mat4(1)) {}
  ~Mesh(void){} ;
  void Mesh::draw(void) ;

};

这是 obj-loader.cpp 的相关部分

void load_obj(const char* filename, Mesh* mesh) {
  ifstream in(filename, ios::in);
  if (!in) { cerr << "Cannot open " << filename << endl; exit(1); }
  vector<int> nb_seen;
  vector<glm::vec4> dummy;
  string line;
  while (getline(in, line)) {
    if (line.substr(0,2) == "v ") {
      istringstream s(line.substr(2));
      glm::vec4 v; s >> v.x; s >> v.y; s >> v.z; v.w = 1.0;
      dummy.push_back(v);
      mesh->vertices.push_back(v);
    } 

任何帮助将不胜感激! 你困惑的朋友!

【问题讨论】:

    标签: c++ class pointers vector unhandled-exception


    【解决方案1】:

    你必须为Mesh分配内存

    打电话之前

    load_obj("Monkey.obj", monkey);
    

    【讨论】:

      【解决方案2】:

      从您发布的代码片段看来,您实际上并未分配网格对象。像这样声明指针:

      Mesh* monkey;
      

      不初始化指针或分配任何内存,所以它的值是未定义的。这就是加载代码崩溃的原因。因为mesh指针无效,并且指向了一些垃圾内存。

      应该更像:

      Mesh* monkey = new Mesh();
      

      那么至少你会有一个有效的指针,然后你可以在加载器代码中合法地引用它。

      【讨论】:

      • 嘿,现在我想起来了。去年我们有 c++ 课程,你知道的!! :-/ 很多 tnx gavinb!
      【解决方案3】:

      mesh 是一个未初始化的指针,您在其上使用mesh-&gt;vertices。此时您已经有了未定义的行为。您可能需要让mesh 指向一个对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-19
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 2013-08-10
        • 2018-08-31
        相关资源
        最近更新 更多