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()ですT*のでnew GLFloat、GLFloat*を返します。x*y*zGLFloatコンストラクターに渡すことが有効である限り、それは有効なコードです。

于 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 に答える