Question

Récemment, après avoir été très fatigué, j'ai écrit le code suivant:

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

Qui, bien sûr, aurait dû être:

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

(Notez les crochets par opposition à la parenthèse.)

Pour autant que je sache, le premier formulaire n'est pas valide, mais g ++ l'a compilé. Bien sûr, il a craché un segfault complètement incompréhensible, mais il a compilé.

Pourquoi?

Était-ce utile?

La solution

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

Crée un pointeur appelé array sur un objet de type GLfloat avec la valeur x * y * z .

Autres conseils

Le résultat de new T () est un T * . Par conséquent, new GLFloat renverrait un GLFloat *. Tant que x * y * z est valide pour être transmis au constructeur de GLFloat, son code est valide.

C'est le même genre de chose que:

int * p = new int(42);

La première expression est un pointeur sur un objet GLfloat avec une valeur (x y z), ce qui est parfaitement légal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top