gaspare.pappalardo1
Ominide
1 min. di lettura
Vota 5 / 5

Concetti Chiave

  • La funzione malloc in C permette l'allocazione dinamica di memoria, richiedendo il numero di byte necessari.
  • La funzione sizeof aiuta a determinare il numero di byte di un tipo o espressione per un'allocazione precisa.
  • I puntatori possono essere usati per gestire array dinamici, con accesso simile a un normale array.
  • È fondamentale liberare la memoria allocata per evitare memory leaks, sebbene il sistema operativo possa gestire parzialmente questa operazione.
  • L'allocazione dinamica è utile per gestire strutture dati di dimensioni variabili durante l'esecuzione del programma.

C - Allocazione dinamica

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.

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]

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 e risposte

Hai bisogno di aiuto?
Chiedi alla community