gpt4 book ai didi

c++ - 访问对象的 vector 时发生读取冲突

转载 作者:行者123 更新时间:2023-11-28 07:12:03 25 4
gpt4 key购买 nike

这是一个c++问题。

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

Mesh* monkey;

和调用函数:

load_obj("Monkey.obj", monkey);

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

mesh->vertices.push_back(v);

我测试了一个本地 vector 虚拟对象,但它成功地被推回了。我不知道为什么它不能推送到对象指针 vector ?

这是网格标题

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

任何帮助将不胜感激!你糊涂的 friend !

最佳答案

您必须为Mesh 分配内存

调用之前

load_obj("Monkey.obj", monkey);

关于c++ - 访问对象的 vector 时发生读取冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com