You are currently browsing the daily archive for Agosto 8th, 2008.

Il linguaggio C mette a disposizione un sistema per allocare memoria in fase di esecuzione, nel caso il programma ne abbia il bisogno. Questo per il semplice fatto che in alcuni casi, non è possibile sapere a priori quanta memoria debba utilizzare un programma in determinate circostante, di conseguenza è improprio usare le normali variabili. Ecco che entrano in gioco le funzione malloc() e free(). Rispettivamente queste due funzioni allocano memoria e la tolgono. La funzione malloc() infatti prepara la memoria in base ai parametri che gli vengono passati, e free() provvede a svuotare la memoria che era stata precedentemente usata da malloc().

Ecco il prototipo della funzione malloc(): void *malloc(size_t numero_di_byte);

Essa restituisce un puntatore NULL nel caso avviene qualche errore, come per esempio quando lo spazio richiesto e troppo grande rispetto a quello disponibile (lo spazio viene allocato in uno spazio chiamato heap, che si trova tra l’area di memoria utilizzata dal programma e lo stack). Nel caso tutto è andato a buon fine, malloc() restituisce un puntatore che punta all’indirizzo della memoria richiesta.

La funzione free invece accetta come parametro il puntatore che punta alla memoria richiesta, in modo tale da svuotarla (liberarla, restiruirla al sistema). Una nota importante: richiamate sempre free() con un argomento valido, cioè un puntatore prima utilizzato da malloc(), altrimenti rischiate di distruggere aree di memoria dello heap già libere o comunque far danno!

Vediamo un esempio:

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

int main(int argc, char *argv[])
{
int *p; //Puntatore che riceverà l’indirizzo della memoria

p = (int *)malloc(10*sizeof(int)); //Richiediamo la memoria per 10 interi

/* Controlliamo che tutto sia andato a buon fine */
if(!p)
{
printf(“Memoria esaurita\n\n”);
exit(1);
}

return EXIT_SUCCESS;
}

Post più letti

Blog Stats

  • 1,458 hits

 

Agosto: 2008
L M M G V S D
« Giu   Nov »
 123
45678910
11121314151617
18192021222324
25262728293031