0

最近很累,写了如下代码:

GLfloat* array = new GLfloat(x * y * z);

其中,当然应该是:

GLfloat* array = new GLfloat[x * y * z];

(注意方括号而不是括号。)

据我所知,第一种形式无效,但 g++ 编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。

为什么?

4

4 回答 4

15
GLfloat* array = new GLfloat(x * y * z);

创建一个指针,该指针指向一个值为 的array类型的对象。GLfloatx * y * z

于 2009-03-15T20:17:18.173 回答
9

好吧,结果new T()是 a T*,所以new GLFloat会返回一个 GLFloat*。只要x*y*z传递给 GLFloat 构造函数是有效的,它就是有效的代码。

于 2009-03-15T20:18:12.227 回答
7

这与以下内容相同:

int * p = new int(42);
于 2009-03-15T20:18:35.957 回答
2

嗯,第一个表达式是一个指向值为 (x y z) 的 GLfloat 的指针,这是完全合法的。

于 2009-03-15T20:18:09.763 回答