我有以下代码:

class RawModel{
    public:
        RawModel(GLuint id, GLuint count);
        GLuint* getID(void);
        GLuint* getVertexCount(void);
    private:
        GLuint *vaoID;
        GLuint *verts;
};

RawModel::RawModel(GLuint id, GLuint count){
    *vaoID = id;
    *verts = count;
}

GLuint* RawModel::getID(void){
    return vaoID;
}

GLuint* RawModel::getVertexCount(void){
    return verts;
}

但是在运行时,它崩溃了。
如果我不创建此类的实例,则我的应用程序可以正常运行,但构造函数似乎崩溃了,我也不知道为什么。 (我是C++的新手)。

我需要使用指针,因为函数glDeleteVertexArrays()要求将Pointer作为第二个参数。

最佳答案

这个

*vaoID = 0;

没有初始化指针。相反,它是取消引用指针并尝试将零分配给指针。但是,没有pointe。取消引用不指向某物的指针是 undefined 的行为。

初始化指针将是
vaoID = nullptr;

但是请注意,此后指针仍然没有指向任何内容。您将必须创建一个对象以使指针指向该对象。

尚不清楚为什么首先要使用指针。我不知道该lib,但是很可能您可以简单地将实例作为成员:
class RawModel{
 //...
private:
    GLuint vaoID;
    GLuint verts;
};

09-12 19:04