Sto studiando per il mio test in C e sto leggendo in un sommario C che ho scaricato da qualche sito. È scritto che non è permesso scrivere arr[i]
dove i
è una variabile. L'unico modo per farlo è con malloc.
Tuttavia, ho scritto il seguente codice e compila senza avvisi e senza errore sul valgrind:Dichiarare un array con una variabile di dimensione non costante
int index = 5;
int a4[index];
a4[0] = 1;
a4[1] = 2;
int index2;
scanf("%d",&index2);
int a5[index2];
a5[0] = 1;
a5[1] = 2;
Allora, qual è la verità dietro le dichiarazioni di matrice? grazie!
Come avvertimento: raccomanderei di non fidarsi troppo dei sommari di C trovati su Internet; Recentemente ho passato molto tempo a rivedere C e C++ in preparazione per le interviste e ho scoperto che la maggior parte delle "guide di studio" di Internet contenevano informazioni inesatte o fuorvianti. Consiglierei [un buon libro introduttivo] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list), con l'avvertenza che spesso tali libri non coprono C99 funzionalità perché sono meno comunemente implementate. –
Mentre sono legali in C99, i VLA sono * estremamente * pericolosi a meno che non si abbia già un limite molto piccolo sul valore dell'espressione da utilizzare come dimensione dell'array. Possono facilmente portare a overflow dello stack (non il buon tipo :-) e il bombardamento della memoria heap). –