-
Istruzioni per l'allocazione dinamica della memoria.
#include<stdlib.h>
void *calloc(size_t size)
//Alloca size byte nello heap. La memoria viene inizializzata a 0.
//La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
void *malloc(size_t size)
//Alloca size byte nello heap. La memoria non viene inizializzata.
//La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
void *realloc(void *ptr, size_t size)
//Cambia la dimensione del blocco allocato all'indirizzo ptr portandola a size.
//La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
void free(void *ptr)
//Disalloca lo spazio di memoria puntato da ptr.
//La funzione non ritorna nulla e non riporta errori.
-
Primo esempio di allocazione. Allocazione dinamica di un int.
#include<stdio.h>
int main()
{
int *ptr_one;
ptr_one = (int *)malloc(sizeof(int));
if (ptr_one == 0)
{
printf("ERROR: Out of memory\n");
return 1;
}
*ptr_one = 25;
printf("%d\n", *ptr_one);
free(ptr_one);
return 0;
}
-
Secondo esempio di allocazione. Allocazione dinamica di una struct definita tramite typedef.
#include<stdio.h>
typedef struct rec
{
int i;
float PI;
char A;
}RECORD;
int main()
{
RECORD *ptr_one;
ptr_one = (RECORD *) malloc (sizeof(RECORD));
if (ptr_one != NULL) {
(*ptr_one).i = 10;
(*ptr_one).PI = 3.14;
(*ptr_one).A = 'a';
printf("First value: %d\n",(*ptr_one).i);
printf("Second value: %f\n", (*ptr_one).PI);
printf("Third value: %c\n", (*ptr_one).A);
free(ptr_one);
}
return 0;
}
-
Terzo esempio di allocazione. Allocazione dinamica di una struct.
#include<stdio.h>
struct rec
{
int i;
float PI;
char A;
};
int main()
{
struct rec *ptr_one;
ptr_one =(struct rec *) malloc (sizeof(struct rec));
ptr_one->i = 10;
ptr_one->PI = 3.14;
ptr_one->A = 'a';
printf("First value: %d\n", ptr_one->i);
printf("Second value: %f\n", ptr_one->PI);
printf("Third value: %c\n", ptr_one->A);
free(ptr_one);
return 0;
}