我在代码中发现了一个疯狂的错误。
我写了以下这一行:
GLfloat* points = new GLfloat(1024);
而不是
GLfloat* points = new GLfloat[1024];
我只是注意到了它。在我发现错误之前,我的代码编译并运行了几次。我意识到这是侥幸,但我的问题是我最初的做法是什么?
我注意到它看起来有点像使用指向已分配内存的指针创建一个类。它是否在堆上创建了一个初始值为1024.0
的GLfloat?如果这是真的,为什么它是有效的语法? (GLfloat不是一个类,是吗?)
答案 0 :(得分:7)
是的,您正在初始化为1024.0的堆上创建一个GLFloat
。您可以使用与类相同的语法初始化基元。 e.g。
int i(10);
将在堆栈上创建一个初始化为10的int。
答案 1 :(得分:6)
GLfloat
是float
的OpenGL别名(即typedef float GLfloat;
)。因此代码:
GLfloat* points = new GLfloat(1024);
相当于:
float* points = new float(1024);
分配浮点数并将其初始化为1024.0
并将其地址分配给指针points
。
答案 2 :(得分:3)
我最初的路线是什么?
GLfloat* points = new GLfloat(1024);
让我们尝试将GLfloat
替换为int
,您会看到如果GLFloat
是类似于int
或float
的类型,那么您将会有以下内容:
int * points = new int(1024);
上述声明表示您正在创建指向int
的指针,其初始值为1024
。因此,在您的情况下,这意味着为类型为points
且初始值为GLfloat
的变量创建指针1024
。
相当于在精简版中编写以下内容:
int * points = new int;
*points = 1024;
有关详细说明,请参阅here。