Dubbio sull'uso di vettori dinamici in C

di il
3 risposte

Dubbio sull'uso di vettori dinamici in C

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?

3 Risposte

  • Re: Dubbio sull'uso di vettori dinamici in C

    Non sarebbero vettori statici

    li puoi dichiarare solo locali interni ad una funzione, non globali, e nemmeno locali static

    e quindi sono abbastanza “simili” ad usare una malloc

    vantaggio non indifferente che si disallocano automaticamente al termine della funzione

    svantaggio e' che essendo vettori e non puntatori, non si possono riallocare

  • Re: Dubbio sull'uso di vettori dinamici in C

    Sono allocati nello Stack, quindi non li puoi fare grandi arbitrariamente. 

    ESISTONO SOLO all'interno della funzione che li crea, (e nelle funzioni CHIAMATE) NON per le funzioni CHIAMANTI la funzione in questione. NON DEVI ritornare il puntatore perche' essendo un puntatore nello Stack, questo (lo stack) viene modificato. 

    Si potrebbe fare MA bisogna sapere ESATTAMENTE (fino all'ultimo bit) quello che si sta facendo. 

    Un blocco di memoria allocato nello heap con malloc/calloc e' un oggetto GLOBALE, nel senso che chiunque abbia il puntatore lo puo' usare, ed esiste fino alla ‘free’ dopo di che se lo usi hai un ‘dangling reference’, errore abbastanza complesso da identificare.

    Spannometricamente parlando, il ‘programmatore quadratico medio’  non ha la necessità di scegliere i due tipi di vettori, gli basta quello creato con malloc/calloc

  • Re: Dubbio sull'uso di vettori dinamici in C

    Grazie per le risposte.

    Nel programma che sto realizzando avevo iniziato ad usare un vettore dinamico da allocare con malloc, ma poi oltre ad incasinarmi avevo desunto che mi bastava usare un vettore dichiarato in run time, con la dimensione opportuna, da usare nella sola funzione che lo necessita. Da qui il mio dubbio.

Devi accedere o registrarti per scrivere nel forum
3 risposte