Error de comstackción C: “El objeto de tamaño variable no se puede inicializar”

¿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}}; 

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

Debe inicializar manualmente esa matriz:

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

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.

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"; 

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 

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

Para statement e inicialización separada de C ++ como esta …

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

Otra forma C ++ solo:

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

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

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.