Domanda

Perché ricevo l'errore "oggetto Variable-sized non può essere inizializzato" con il seguente codice?

int boardAux[length][length] = {{0}};
È stato utile?

Soluzione

Io parto dal presupposto che si sta utilizzando un compilatore C99 (con supporto per gli array di dimensioni in modo dinamico). Il problema nel codice è che nel momento in cui i compilatori vede la tua dichiarazione di variabile che non può sapere quanti elementi ci sono nella matrice (sto anche dando per scontato, dal errore del compilatore che length non è una costante di tempo di compilazione).

È necessario inizializzare manualmente tale matrice:

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

Altri suggerimenti

Si riceve questo errore perché in linguaggio C che non sono autorizzati a utilizzare inizializzatori di array di lunghezza variabile. Il messaggio di errore che si stanno ottenendo praticamente dice tutto.

  

6.7.8 inizializzazione

     

...

     

3 Il tipo di entità da inizializzare sarà   un array di dimensione sconosciuta o un oggetto   tipo che non è una lunghezza variabile   tipo di matrice.

Questo dà errore:

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

Questo dà anche l'errore:

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

Ma questo funziona bene:

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

Hai bisogno di mettere il valore nel seguente modo:

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

Dopo dichiara la matrice

int boardAux[length][length];

il modo più semplice per assegnare i valori iniziali come zero utilizzando per ciclo, anche se può essere un po 'lungo

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

È sufficiente dichiarare la lunghezza di essere un contro, se non è la memoria, allora si dovrebbe essere l'allocazione dinamica

Per C ++ dichiarazione separata e l'inizializzazione come questo ..

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

Non si può farlo. Compilatore C non può fare una cosa così complessa sulla pila.

Devi usare mucchio e l'allocazione dinamica.

Che cosa avete veramente bisogno di fare:

  • dimensione di calcolo (n m sizeof (elemento)) della memoria è necessario
  • chiamata malloc (dimensioni) per allocare la memoria
  • creare una funzione di accesso: int * accesso (PTR, x, y, rowsize) {return PTR + y * rowsize + x; }

Usa accesso (boardAux, x, y, formato) = 42 per interagire con la matrice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top