Esto me ha estado preocupando por un tiempo. Va al corazón de mi (falta de) comprensión de la diferencia entre la asignación de memoria estática y dinámica. La siguiente matriz es una matriz estática ordinaria, que debería significar que la memoria se asigna durante el tiempo de compilación, ¿correcto? Sin embargo, lo configuré para que el usuario ingrese el tamaño de la matriz en tiempo de ejecución.La matriz es estática, pero el tamaño de la matriz no se conoce hasta el tiempo de ejecución. ¿Cómo es esto posible?
#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;
}
Tenga en cuenta que no hay new
o delete
operadores en este programa. Funciona bien en Xcode 4.2 (compilador predeterminado de Clang) y en el servidor UNIX de mi escuela (GCC 4.4.5). ¿Cómo sabe el compilador cuánta memoria asignar en arr
cuando la matriz se crea en tiempo de compilación? ¿Es esto solo una casualidad de mi compilador, un código peligroso que podría dañar otra memoria, o es legítimo?
Esto usa una función llamada de longitud _variable arrays_, que debutó en C99. –
Intenta compilar con 'g ++ -Wall -Wextra -pedantic -std = C++ 98' –