Ahora, antes de que la gente comience a marcar esto como dup, he leído todo lo siguiente, ninguno de los cuales proporciona la respuesta que estoy buscando:
- Preguntas frecuentes de C: ¿Qué hay de malo en emitir el valor de retorno de malloc?
- SO: ¿Debería lanzar explícitamente el valor de retorno de malloc ()?
- SO: Pointer-casts innecesarios en C
- SO: ¿Lanzo el resultado de malloc?
Tanto las preguntas frecuentes de C como muchas respuestas a las preguntas anteriores citan un misterioso error que mallocel valor de retorno del casting puede ocultar; sin embargo, ninguno de ellos da un ejemplo específico de tal error en la práctica. Ahora preste atención a que dije error , no advertencia .
Ahora dado el siguiente código:
#include <string.h>
#include <stdio.h>
// #include <stdlib.h>
int main(int argc, char** argv) {
char * p = /*(char*)*/malloc(10);
strcpy(p, "hello");
printf("%s\n", p);
return 0;
}
Compilar el código anterior con gcc 4.2, con y sin la conversión, da las mismas advertencias, y el programa se ejecuta correctamente y proporciona los mismos resultados en ambos casos.
anon@anon:~/$ gcc -Wextra nostdlib_malloc.c -o nostdlib_malloc
nostdlib_malloc.c: In function ‘main’:
nostdlib_malloc.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
anon@anon:~/$ ./nostdlib_malloc
hello
Entonces, ¿alguien puede dar un ejemplo de código específico de un error de compilación o tiempo de ejecución que podría ocurrir debido al mallocvalor de retorno del casting , o es solo una leyenda urbana?
Editar Me he encontrado con dos argumentos bien escritos sobre este tema:
- A favor de la conversión: Aviso de CERT: Transmita inmediatamente el resultado de una llamada a la función de asignación de memoria en un puntero al tipo asignado
- Against Casting (error 404 de 2012-02-14: use la copia de Internet Archive Wayback Machine del 2010-01-27. {2016-03-18: "La página no se puede rastrear ni mostrar debido a robots.txt."})
voidpunteros permite compilar el código como C ++; algunas personas dicen que es una característica, yo diría que es un error;)