c compiler-errors initializer-list variable-length-array

Error de compilación C: "El objeto de tamaño variable no se puede inicializar"



compiler-errors initializer-list (8)

Después de declarar la matriz

int boardAux[length][length];

La forma más sencilla de asignar los valores iniciales como cero es usar for for loop, incluso si puede ser un poco largo

int i, j; for (i = 0; i<length; i++) { for (j = 0; j<length; j++) boardAux[i][j] = 0; }

¿Por qué recibo el error "No se puede inicializar el objeto de tamaño variable" con el siguiente código?

int boardAux[length][length] = {{0}};


Esto da error:

int len; scanf("%d",&len); char str[len]="";

Esto también da error:

int len=5; char str[len]="";

Pero esto funciona bien:

int len=5; char str[len]; //so the problem lies with assignment not declaration

Debe poner valor de la siguiente manera:

str[0]=''a''; str[1]=''b''; //like that; and not like str="ab";


No puedes hacerlo. El compilador de C no puede hacer una cosa tan compleja en la pila.

Debe usar el montón y la asignación dinámica.

Lo que realmente necesitas hacer:

  • calcular el tamaño (n m sizeof (elemento)) de la memoria que necesita
  • llamar a malloc (tamaño) para asignar la memoria
  • crear un descriptor de acceso: int * access (ptr, x, y, rowSize) {return ptr + y * rowSize + x; }

Use * access (boardAux, x, y, size) = 42 para interactuar con la matriz.


Otra forma para C ++:

const int n = 5; const int m = 4; int a[n][m] = {0};


Para declaración e inicialización separada de C ++ como esta ...

int a[n][m] ; a[n][m]= {0};


Recibe este error porque en el lenguaje C no tiene permitido utilizar inicializadores con matrices de longitud variable. El mensaje de error que está recibiendo básicamente lo dice todo.

6.7.8 Inicialización

...

3 El tipo de entidad que se inicializará será una matriz de tamaño desconocido o un tipo de objeto que no sea de tipo de matriz de longitud variable.


Simplemente declare que la longitud es un inconveniente, si no es así, debería asignar memoria dinámicamente


Supongo que está utilizando un compilador C99 (con soporte para matrices de tamaño dinámico). El problema en su código es que en el momento en que los compiladores ven su declaración de variable no pueden saber cuántos elementos hay en la matriz (también estoy asumiendo aquí, a partir del error del compilador, que la length no es una constante de tiempo de compilación).

Debe inicializar manualmente esa matriz:

int boardAux[length][length]; memset( boardAux, 0, length*length*sizeof(int) );