Pregunta

Recientemente, después de estar muy cansado, escribí el siguiente código:

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

Que, por supuesto, debería haber sido:

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

(Tenga en cuenta los corchetes en lugar del paréntesis).

Hasta donde yo sé, la primera forma no es válida, pero g ++ la compiló. Claro, escupió una segfault completamente incomprensible, pero se compiló.

¿Por qué?

¿Fue útil?

Solución

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

Crea un puntero llamado array para un objeto de tipo GLfloat con un valor de x * y * z .

Otros consejos

Bueno, el resultado de new T () es un T * , por lo que new GLFloat devolvería un GLFloat *. Mientras x * y * z sea válido para pasar al constructor GLFloat, es un código válido.

Es el mismo tipo de cosas que:

int * p = new int(42);

Bueno, la primera expresión es un puntero a un GLfloat con valor (x y z), que es perfectamente legal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top