libri-javascript-python

In questa lezione studieremo la funzione realloc in C, per modificare le aree precedentemente allocate anche in una fase successiva.

Abbiamo già studiato infatti le funzioni malloc e calloc che permettono di allocare la memoria dinamicamente.

Il prototipo di realloc è:

void *realloc(void *, size_t);

Dove, il primo argomento rappresenta il puntatore all’inizio dell’area di memoria che si vuole dimensionare, mentre il secondo indica la nuova dimensione da assegnare al blocco di memoria.

Se il nuovo blocco di memoria è più grande di quello precedente allora i dati rimarranno inalterati, in caso contrario invece i dati saranno eliminati.

Anche in questo caso il valore di ritorno è di tipo void, quindi per far si che punti a tipi diversi occorre effettuare un’operazione di cast, così come abbiamo già visto per malloc e calloc.

La funzione realloc si può anche chiamare più volte sullo stesso puntatore.

Inoltre ricordiamo che se il puntatore è NULL si comporta allo stesso modo di malloc().

Esempio di utilizzo di realloc

Innanzitutto utilizziamo malloc per allocare un array di 10 interi, ma quando assegniamo a[10]=13; o ad esempio a[18]=-120; stiamo commento un errore. Occorre infatti fare la riallocazione utilizzando la funzione realloc.

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

int main () {
	int *a; 

	/*allochiamo un array di 10 interi*/
	a=malloc(10*sizeof(int));
        
        if(a==NULL) {
	   printf("\nAllocazione fallita!");
    	   exit(0);
	}	

	/*allocazioni corrette*/
	a[2]=-5;
	a[7]=22;
	
	/*allocazioni non corrette perchè sono fuori dalla zona assegnata con la malloc*/
	a[10]=13;
	a[18]=-120;
	
	/* occorre prima fare una riallocazione se vogliamo ad esempio contenere 20 interi*/
  	a=realloc(a, 20*sizeof(int));
  	
  	/*adesso si può arrivare sino ad a[19]*/
  	a[10]=13;
	a[18]=-120;
	
  	printf("a[2]=%d a[7]=%d a[10]=%d a[18]=%d\n", a[2], a[7], a[10], a[18]);
 	
 	return 0; 
} 

Chiaramente questo è solo un semplice esempio di utilizzo della funzione realloc in C, più avanti faremo altri esempi.

Alcuni link utili

Indice tutorial linguaggio C

Realizzare un menù di scelta in C

Strutture complesse in C

Esercizio sulle struct in C

Typedef struct 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