Domanda

Di recente, dopo essere stato molto stanco, ho scritto il seguente codice:

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

Che, ovviamente, avrebbe dovuto essere:

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

(Nota le parentesi quadre rispetto alla parentesi.)

Per quanto ne so, il primo modulo non è valido, ma è stato compilato da g ++. Certo, sputò un segfault completamente incomprensibile, ma compilato.

Perché?

È stato utile?

Soluzione

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

Crea un puntatore chiamato array su un oggetto di tipo GLfloat con un valore di x * y * z .

Altri suggerimenti

Bene, il risultato di new T () è un T * , quindi new GLFloat restituirebbe un GLFloat *. Finché x * y * z è valido per passare al costruttore GLFloat, è un codice valido.

È lo stesso tipo di cose di:

int * p = new int(42);

Bene, la prima espressione è un puntatore a una GLfloat con valore (x y z), che è perfettamente legale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top