Questo mi ha turbato per un po '. Va al cuore della mia (mancanza di) comprensione della differenza tra allocazione di memoria statica e dinamica. Il seguente array è un ordinario array statico, che dovrebbe significare che la memoria è allocata durante il tempo di compilazione, corretto? Tuttavia, l'ho impostato in modo che l'utente inserisca la dimensione dell'array in fase di runtime.L'array è statico, ma la dimensione dell'array non è nota fino al runtime. Com'è possibile?
#include <iostream>
using namespace std;
int main() {
cout << "how many elements should the array hold? ";
int arraySize;
cin >> arraySize;
int arr[arraySize];
for (int i = 0; i < arraySize; ++i)
arr[i] = i * 2;
return 0;
}
Nota che non ci sono new
o delete
operatori del programma. Funziona perfettamente con Xcode 4.2 (compilatore Clang predefinito) e con il server UNIX della mia scuola (GCC 4.4.5). Come fa il compilatore a sapere quanta memoria allocare per arr
quando la matrice viene creata in fase di compilazione? È solo un colpo di fortuna del mio compilatore, un codice pericoloso che potrebbe corrompere altri ricordi, o è legittimo?
Questo utilizza una funzione chiamata _variable lunghezza arrays_, che ha debuttato nel C99. –
Prova a compilarlo con 'g ++ -Wall -Wextra -pedantic -std = C++ 98' –