Oggi ho raggiunto la pagina 167 di The C Programming Language (seconda edizione Brian W. Kernighan e Dennis M. Ritchie) e ho scoperto che l'autore dice che devo cast malloc
. Ecco la parte del libro:
7.8.5 Gestione dell'archiviazione
Le funzioni malloc e calloc ottengono dinamicamente blocchi di memoria.
void *malloc(size_t n)
restituisce un puntatore a n byte di memoria non inizializzata o NULL se la richiesta non può essere soddisfatta.
void *calloc(size_t n, size_t size)
restituisce un puntatore a spazio libero sufficiente per un array di n oggetti della dimensione specificata o NULL se la richiesta non può essere soddisfatta. La memoria è inizializzata a zero. Il puntatore restituito da malloc o calloc ha il corretto allineamento per l'oggetto in questione, ma deve essere inserito nel tipo appropriato, come in
int *ip; ip = (int *) calloc(n, sizeof(int));
So già che malloc
(e la sua famiglia) restituisce il tipo void * , e ci sono buone spiegazioni sul perché non lanciaremalloc
.
Ma la mia domanda è: perché il libro dice che dovrei lanciarlo?
void *
e non sia stato aggiornato. Vedi anche questa risposta .
malloc
perché NON è C ++ - tranne quando devi - ma non dovresti - tranne ... AGGGHHHHHH !!!!! :-)