¿Por qué dice el Libro que debo elegir a Malloc?
Hoy llegué a la página 167 de El Lenguaje de programación C (segunda edición Brian W. Kernighan & Dennis M. Ritchie) y encontró que el autor dice que debo lanzar malloc
. Aquí está la parte del libro:
7.8.5 Gestión del 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 la solicitud no puede ser satisfecho.
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 la solicitud no puede ser satisfecha. 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 ser lanzado en el tipo apropiado, como en
int *ip; ip = (int *) calloc(n, sizeof(int));
Ya sé que malloc
(y su familia) devuelve el tipo void * , y hay buenos explicaciones por qué no lanzar malloc
.
Pero mi pregunta es: ¿Por qué el libro dice que yo debería lanzarlo?
1 answers
De http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm:
In pre-ANSI C as as described in K & R-1 mall malloc () returned a
char *
y fue necesario lanzar su valor de retorno en todos los casos en que el la variable receptora no fue también unchar *
. El nuevovoid *
escribe La norma 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 pregunté a Dennis Ritchie por una opinión que podría cita sobre la validez de la frase citada arriba de la página 142. He respondió:
En cualquier caso, ahora que releo las cosas en la p. 142, creo que es incorrecto; está escrito de tal manera que no es solo defensivo contra reglas anteriores, tergiversa las reglas ANSI.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-18 13:10:10