C++初始化指针会使应用程序随机崩溃

C++ initializing pointer crashes application randomly?

本文关键字:应用程序 随机 崩溃 初始化 指针 C++      更新时间:2023-10-16

我有以下代码:

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()调用指针作为第二个参数。

*vaoID = 0;

未初始化指针。相反,它正在取消引用指针并尝试将零附加到指针。但是,没有尖头。取消引用不指向某物的指针是未定义的行为。

初始化指针将是

vaoID = nullptr;

但请注意,在此之后,指针仍然不指向任何内容。您必须创建一个对象才能使指针指向它。

顺便说一句,目前尚不清楚您为什么首先使用指针。我不知道那个库,但很可能你可以简单地将实例作为成员:

class RawModel{
 //...
private:
    GLuint vaoID;
    GLuint verts;
};

如果需要初始化指针,请初始化它们,而不是它们指向的数据:

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

但最好使用成员初始化:

RawModel::RawModel(GLuint id, GLuint count) :
    vaoID( nullptr ),
    verts( nullptr )
{
}
但不清楚为什么在类中有指针,在

方法中有返回指针,而不是按值存储和返回它们。