C++初始化指针会使应用程序随机崩溃
C++ initializing pointer crashes application randomly?
我有以下代码:
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 )
{
}
但不清楚为什么在类中有指针,在方法中有返回指针,而不是按值存储和返回它们。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- DoModal 主应用程序随机返回 -1 代码
- C++初始化指针会使应用程序随机崩溃
- 当Windows XP(32位,SP3)播放声音时,随机应用程序暂停半秒钟
- 关于在omnetpp.ini中将两个不同的应用程序随机分配到50个节点
- 编译C++应用程序提供随机浮点值
- Wxwidget wxTimer 会导致应用程序关闭时出现随机访问冲突
- 如何在C++中随机生成的应用程序中在数字之间留出空格
- av_free随机崩溃应用程序-FFMPEG C++
- 32位Qt应用程序在Windows 7 x64上随机崩溃