¿Por qué recibo el error "Es posible que el objeto de tamaño variable no se inicialice" con el siguiente código?
int boardAux[length][length] = {{0}};
c
compiler-errors
initializer-list
variable-length-array
Hola Mundo
fuente
fuente
enum {length = 0xF } ; int boardAux[length][length] = {0};
Respuestas:
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í, por el error del compilador que
length
no es una constante de tiempo de compilación).Debe inicializar manualmente esa matriz:
fuente
printf( "%d", boardAux[1][2] )
compila bien. El compilador conoce los tamaños y sabe en qué posición en la memoria está el (1,2) -ésimo elemento. Si usa la asignación dinámica, la matriz es unidimensional y debe realizar las matemáticas usted mismo:printf("%d", boardAux[ 1*length + 2 ])
memset
llamada. Lo acabo de corregir.length
to bestatic
? En C ++ 14 funciona bien.Recibe este error porque en lenguaje C no se le permite utilizar inicializadores con matrices de longitud variable. El mensaje de error que está recibiendo básicamente lo dice todo.
fuente
Esto da error:
Esto también da error:
Pero esto funciona bien:
Necesita poner valor de la siguiente manera:
fuente
Después de declarar la matriz
La forma más sencilla de asignar los valores iniciales como cero es usar el bucle for, incluso si puede ser un poco largo
fuente
memset
es más sencillo y rápido.La pregunta ya está respondida, pero quería señalar otra solución que es rápida y funciona si la longitud no debe cambiarse en tiempo de ejecución. Use la macro #define antes de main () para definir la longitud y en main () su inicialización funcionará:
Las macros se ejecutan antes de la compilación real y la longitud será una constante de tiempo de compilación (como lo menciona David Rodríguez en su respuesta). En realidad, sustituirá la longitud por 10 antes de la compilación.
fuente
Simplemente declare que la longitud es una desventaja, si no lo es, debería asignar memoria dinámicamente
fuente
fuente
Para una declaración e inicialización separadas de C ++ como esta.
fuente
No puedes hacerlo. El compilador de C no puede hacer algo tan complejo en la pila.
Tienes que usar el montón y la asignación dinámica.
Lo que realmente necesitas hacer:
Utilice * access (boardAux, x, y, size) = 42 para interactuar con la matriz.
fuente