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));
}
}