¿Por qué el libro "El lenguaje de programación C" dice que debo lanzar malloc?
casting kernighan-and-ritchie (1)
De http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm :
En pre-ANSI C, como se describe en K & R-1, malloc () devolvió un
char *
y fue necesario convertir su valor de retorno en todos los casos en que la variable receptora no era también unchar *
. El nuevo tipovoid *
en el Estándar C hace que estas contorsiones sean innecesarias.Para salvar a cualquiera de la vergüenza de saltar innecesariamente a la defensa de K & R-2, le pedí a Dennis Ritchie una opinión que pudiera citar sobre la validez de la oración citada anteriormente en la página 142. Él respondió:
En cualquier caso, ahora que releí las cosas en la pág. 142, creo que está mal; está escrito de tal manera que no solo es defensivo contra las reglas anteriores, sino que tergiversa las reglas ANSI.
Hoy llegué a la página
167
de
The C Programming Language (segunda edición, Brian W. Kernighan y Dennis M. Ritchie)
y descubrí que el autor dice que debo lanzar
malloc
.
Aquí está la parte del libro:
7.8.5 Gestión de almacenamiento
Las funciones malloc y calloc obtienen bloques de memoria dinámicamente.
void *malloc(size_t n)
devuelve un puntero a n bytes de almacenamiento no inicializado, o NULL si no se puede satisfacer la solicitud.
void *calloc(size_t n, size_t size)
devuelve un puntero a suficiente espacio libre para una matriz de n objetos del tamaño especificado, o NULL si no se puede satisfacer la solicitud. El almacenamiento se inicializa a cero. El puntero devuelto por malloc o calloc tiene la alineación adecuada para el objeto en cuestión, pero debe convertirse en el tipo apropiado, como en
int *ip; ip = (int *) calloc(n, sizeof(int));
Ya sé que
malloc
(y su familia) devuelve type
void *
, y
hay buenas explicaciones de por qué no lanzar
malloc
.
Pero mi pregunta es: ¿por qué el libro dice que debería lanzarlo?