Avant que les gens ne commencent à considérer cela comme un double, j'ai lu tout ce qui suit, mais aucun ne fournit la réponse que je cherche :
- C FAQ : Quel est le problème avec le casting de la valeur de retour de malloc ?
- SO : Dois-je exprimer explicitement la valeur de retour de malloc() ?
- SO : Pointeurs-cast inutiles en C
- SO : Est-ce que je jette le résultat de malloc ?
La FAQ C et de nombreuses réponses aux questions ci-dessus citent une erreur mystérieuse qui coule malloc
Cependant, aucun d'entre eux ne donne un exemple spécifique d'une telle erreur dans la pratique. Maintenant, faites attention que j'ai dit erreur pas avertissement .
Maintenant, étant donné le code suivant :
#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;
}
La compilation du code ci-dessus avec gcc 4.2, avec et sans le cast donne les mêmes avertissements, et l'exécution s'effectue correctement et fournit les mêmes résultats dans les deux cas.
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
Quelqu'un peut-il donner un exemple de code spécifique d'une erreur de compilation ou d'exécution qui pourrait se produire à cause de l'encodage ? malloc
ou s'agit-il d'une légende urbaine ?
Editar Je suis tombé sur deux arguments bien écrits concernant cette question :
- En faveur du Casting : Avis du CERT : Transformez immédiatement le résultat d'un appel de fonction d'allocation de mémoire en un pointeur vers le type alloué.
- Contre le Casting