Siempre pensé que al declarar una matriz en C++, el tamaño tiene que ser un valor entero constante.Declarar el tamaño de la matriz con una variable no constante
Por ejemplo:
int MyArray[5]; // correct
o
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
pero
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Aquí es también lo que se explica en The C++ Programming Language, by Bjarne Stroustrup:
El número de elementos de la matriz, la matriz encuadernada, debe ser una expresión constante (§C.5). Si necesita límites variables, use un vector (§3.7.1, §16.3). Por ejemplo:
void f(int i) {
int v1[i]; // error : array size not a constant expression
vector<int> v2(i); // ok
}
Pero para mi gran sorpresa, el código anterior se compila bien en mi sistema!
Aquí es lo que he intentado compilar:
void f(int i) {
int v2[i];
}
int main()
{
int i = 3;
int v1[i];
f(5);
}
me dieron ningún error! Estoy usando GCC v4.4.0.
¿Hay algo que me falta?
Y esta es la razón por la que probar algo con un compilador no significa nada en términos de corrección de código. – GManNickG
Duplicado de http://stackoverflow.com/questions/737240/c-array-size-at-run-time-w-o-dynamic-allocation-is-allowed – nico