Concetti Chiave

  • L'allocazione dinamica in C consente di riservare memoria durante l'esecuzione del programma, utilizzando la funzione malloc per specificare il numero di byte richiesti.
  • Per allocare un vettore di interi, si utilizza un puntatore e la sintassi malloc(n * sizeof(int)), dove n è la dimensione del vettore.
  • È possibile accedere agli elementi del vettore allocato dinamicamente come se fosse un normale array, utilizzando la notazione p[index].
  • La liberazione della memoria allocata è fondamentale per prevenire il memory leak, ovvero la situazione in cui porzioni di memoria non più utilizzate rimangono occupate.
  • Nonostante esistano strumenti nel kernel del sistema operativo per gestire automaticamente la memoria, è buona prassi liberare esplicitamente la memoria non più necessaria.

Che cos'è l'allocazione dinamica in C?

Con il linguaggio di programmazione C è possibile allocare dinamicamente delle porzioni di memoria ed assegnarne l’indirizzo manualmente ad una o più variabili di tipo puntatore.
La funzione utilizzata per allocare la memoria necessaria è la malloc(n bytes), cui viene passato come parametro il numero di bytes necessari; non è però necessario indicare il numero di bytes come numero intero ma si utilizza la funzione sizeof(tipo o espressione) che ritorna il numero di byte del tipo o dell’espressione passata come parametro.

Esempio di allocazione di un vettore

Es.

Si vuole allocare un vettore di 5 interi

int *p, n = 5;

p = malloc (n * sizeof(int));
In questo modo la variabile puntatore p contiene l’indirizzo della prima cella del vettore di interi.

Se viene allocato dinamicamente un array, è possibile accedere alle varie celle come se la variabile puntatore p fosse un normale array.

Es.

p[3]

p[0][1]

Liberazione della memoria allocata

Una volta che la memoria allocata non è più necessaria occorre liberarla per evitare il fenomeno del memory leak, che rende occupata porzione di memoria non più utilizzata da nessuno (esistono comunque nel kernel del sistema operativo degli strumenti che automatizzano questa operazione, rendendo quasi superfluo il suo utilizzo in quanto anche se utilizzato, potrebbe non essere effettuato fino a successiva richiesta del sistema operativo stesso).

Domande da interrogazione

  1. Come si effettua l'allocazione dinamica di memoria in C?
  2. In C, l'allocazione dinamica di memoria si effettua utilizzando la funzione malloc(n bytes), dove n rappresenta il numero di byte necessari. È consigliabile utilizzare sizeof(tipo o espressione) per determinare il numero di byte del tipo desiderato.

  3. Qual è un esempio pratico di allocazione di un vettore in C?
  4. Un esempio di allocazione di un vettore di 5 interi è il seguente: si dichiara un puntatore int *p e si utilizza malloc per allocare la memoria: p = malloc(n * sizeof(int)), dove n è 5. In questo modo, p punta alla prima cella del vettore.

  5. Perché è importante liberare la memoria allocata in C?
  6. È fondamentale liberare la memoria allocata per prevenire il memory leak, che si verifica quando porzioni di memoria non più utilizzate rimangono occupate. Anche se esistono strumenti nel kernel del sistema operativo per gestire automaticamente questa operazione, è buona pratica farlo manualmente quando non è più necessaria la memoria.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community