la memoria è obbligatoria allocarla solo nel caso dei puntatori, il tuo array contiene valori.
Se dichiari:
int* a;//LA MEMORIA NON E' ALLOCATA E TANTO MENO INIZIALIZZATA
int a;//la memoria è allocata ma non inizializzata
Come esempio riporto un programma che ha un array di puntatori a interi:
Eseguendo normalmente, vediamo scrivere: 1 2 3 4... e il 5? Non si vede, allora facciamo un debug e... eccolo! Access Violation! E l'indirizzo incriminato è proprio lui: 0xC0000005.codice:#include <iostream> using namespace std; int main() { int a = 1; int b = 2; int c = 3; int d = 4; int t = 5; int *q[] = {&a,&b,&c,&d}; q[5] = &t; for(int i = 0; i < 5; i++) { cout << *q[i] << " "; } return 0; }
Quindi avremo:
0xC0000001 = 1
0xC0000002 = 2
0xC0000003 = 3
0xC0000004 = 4
----------------
0xC0000005 = 5// gli do il valore 5 senza aver allocato => Access Violation
Ho fatto adesso gli esperimenti, e nella speranza di non aver detto cacate, ciao

Rispondi quotando