They are just cast into void.
Esempi C - Allocazione dinamica della memoria
Il programma di esempio mostra l'utilizzo delle funzioni malloc
, calloc
, realloc
, free
e alloca
.
Vengono inizialmente allocate due zone di memoria rispettivamente con le funzioni malloc
e calloc
per la memorizzazione di 10 valori di tipo int
; a parte la differenza di sintassi, che e' visibile dal codice, la calloc
effettua anche l'azzeramento della memoria allocata. Se l'allocazione va a buon fine viene restituito un puntatore alla memoria allocata, diversamente viene restituito un puntatore NULL
.
Successivamente viene utilizzata la funzione realloc
per aumentare la dimensione della memoria allocata; essa viene poi liberata con la funzione free
.
Un'alternativa all'uso della malloc
e' offerta dalla funzione alloca
, che non necessita della chiamata a free
ma libera la memoria automaticamente al ritorno della funzione che effettua l'allocazione.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i=0; int *ptr1 = malloc(10 * sizeof (int)); int *ptr2 = calloc(10, sizeof (int)); if( (ptr1 == NULL) || (ptr2 == NULL) ) { fprintf(stderr, "Errore nell'allocazione della memoria\n"); exit(1); } for(i=0; i<10; i++) { *(ptr1+i) = i; *(ptr2+i) = i; printf("malloc[%d] = %d\tcalloc[%d] = %d\n", i, *(ptr1+i), i, *(ptr2+i)); } printf("\n"); ptr1 = realloc(ptr1, 20 * sizeof (int)); ptr2 = realloc(ptr2, 20 * sizeof (int)); if( (ptr1 == NULL) || (ptr2 == NULL) ) { fprintf(stderr, "Errore nell'allocazione della memoria\n"); exit(1); } for(i=0; i<20; i++) { *(ptr1+i) = i; *(ptr2+i) = i; printf("re-malloc[%d] = %d\tre-calloc[%d] = %d\n", i, *(ptr1+i), i, *(ptr2+i)); } free(ptr1); free(ptr2); printf("\n"); // Con alloca non serve chiamare free... ptr1 = alloca(30 * sizeof (int)); if(ptr1 == NULL) { fprintf(stderr, "Errore nell'allocazione della memoria\n"); exit(1); } for(i=0; i<30; i++) { *(ptr1+i) = i; printf("alloca[%d] = %d\n", i, *(ptr1+i)); } }