libri-javascript-python

In questa lezione studieremo la funzione free che serve a rilasciare la memoria precedentemente allocata in maniera dinamica con le funzioni malloc, calloc o realloc.

Il prototipo della funzione free in C è:

void free(void *);

Quindi la funzione ha come argomento il puntatore all’inizio dell’area di memoria precedentemente allocata, che adesso si vuole rendere disponibile perché non più utilizzata. La funzione inoltre non ha alcun valore di ritorno.


Esempio di utilizzo di free in C

Facciamo un semplice esempio per capire come utilizzare al funzione.

Innanzitutto dichiariamo un puntatore a double, dopo con la funzione malloc allochiamo un’area di memoria per contenere un array di elementi double.

Dopo controlliamo che il puntatore non abbia valore NULL per poter proseguire nel programma.

Poi assegniamo dei valori e li visualizziamo con la funzione printf.

Infine liberiamo la memoria utilizzando la funzione free in C, a cui passiamo come argomento il puntatore.

Ecco dunque il listato completo:

#include <stdio.h>
#include <stdlib.h>

int main()
{ 
	/*dichiariamo un puntatore a double*/
  	double * a;
 
	/*riserviamo un'area di memoria per un array di 5000 elementi double*/
 	a=(double *) malloc(5000*sizeof(double)); 

 	if(a==NULL) {
	   printf("\n allocazione fallita !");
    	exit(0);
	}
	
  	a[2000]=123.45;
  	a[99]=-12.895;
  	
  	/*stampo i valori*/
 	printf("I valori inseriti sono: %lf %lf", a[2000], a[99]);
	
	/*libero l'area di memoria */
 	free(a);

return 0; 
}

Dopo che un puntatore è stato passato come argomento alla funzione free, diventa un dangling pointer, cioè un puntatore pendente. Infatti esso fa riferimento a un’area di memoria non più disponibile.

Bisogna prestare attenzione a non de-allocare più volte la stessa area di memoria in quanto potrebbero esserci degli effetti imprevedibili.

Alcuni link utili

Indice tutorial linguaggio C

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C