In C si è (o era) soliti dichiarare un vettore dinamico tramite l'uso della funzione malloc().
Classico esempio:
int dim;
int *vett;
printf("Di quanti elementi hai bisogno? ");
scanf("%d", &dim);
vett = (int*)malloc(dim*sizeof(int));
e poi bisogna ricordarsi di usare la funzione free() per liberare la memoria allocata.
A partire dal C99, se non erro, è possibile dichiarare vettori statici di lunghezza non nota all'inizio, ossia di usare come dimensione del vettore una variabile, aggirando così l'uso della malloc.:
int dim;
printf("Di quanti elementi hai bisogno? ");
scanf("%d", &dim);
int vett[dim];
I miei dubbi:
1) nel secondo caso non è richiesta alcuna deallocazione esplicita della memoria, giusto?
2) quando è necessario utilizzare il primo metodo piuttosto che il secondo?