Por que recebo o erro "Objeto de tamanho variável não pode ser inicializado" com o código a seguir?
int boardAux[length][length] = {{0}};
Por que recebo o erro "Objeto de tamanho variável não pode ser inicializado" com o código a seguir?
int boardAux[length][length] = {{0}};
enum {length = 0xF } ; int boardAux[length][length] = {0};
Respostas:
Presumo que você esteja usando um compilador C99 (com suporte para matrizes de tamanho dinâmico). O problema em seu código é que, no momento em que os compiladores vêem sua declaração de variável, não podem saber quantos elementos existem no array (também estou assumindo aqui, a partir do erro do compilador que
length
não é uma constante de tempo de compilação).Você deve inicializar manualmente essa matriz:
fonte
printf( "%d", boardAux[1][2] )
compila bem. O compilador conhece os tamanhos e em que posição na memória está o (1,2) -ésimo elemento. Se você usar a alocação dinâmica, a matriz é unidimensional e você mesmo deve fazer as contas:printf("%d", boardAux[ 1*length + 2 ])
memset
chamada. Acabei de corrigi-lo.length
comostatic
? Em C ++ 14 funciona bem.Você recebe este erro porque na linguagem C você não tem permissão para usar inicializadores com matrizes de comprimento variável. A mensagem de erro que você está recebendo diz basicamente tudo.
fonte
Isso dá erro:
Isso também dá erro:
Mas isso funciona bem:
Você precisa colocar o valor da seguinte maneira:
fonte
Depois de declarar a matriz
a maneira mais simples de atribuir os valores iniciais como zero é usando o loop for, mesmo que seja um pouco longo
fonte
memset
é mais simples e rápido.A questão já foi respondida, mas eu queria apontar outra solução que é rápida e funciona se o comprimento não deve ser alterado em tempo de execução. Use a macro #define antes de main () para definir o comprimento e em main () sua inicialização funcionará:
As macros são executadas antes da compilação real e a duração será uma constante de tempo de compilação (como referido por David Rodríguez em sua resposta). Na verdade, ele substituirá o comprimento por 10 antes da compilação.
fonte
Simplesmente declare o comprimento como uma desvantagem, se não for, você deve alocar memória dinamicamente
fonte
fonte
Para C ++, separe a declaração e a inicialização como esta.
fonte
Você não pode fazer isso. O compilador C não pode fazer uma coisa tão complexa na pilha.
Você tem que usar heap e alocação dinâmica.
O que você realmente precisa fazer:
Use * access (boardAux, x, y, size) = 42 para interagir com a matriz.
fonte