It seems fitting I post an answer, since I left the comment :P
Basically, if you forget to include stdlib.h
the compiler will assume malloc
returns an int
. Without casting, you will get a warning. With casting you won't.
So by casting you get nothing, and run the risk of suppressing legitimate warnings.
Much is written about this, a quick google search will turn up more detailed explanations.
edit
It has been argued that
TYPE * p;
p = (TYPE *)malloc(n*sizeof(TYPE));
makes it obvious when you accidentally don't allocate enough memory because say, you thought p
was TYPe
not TYPE
, and thus we should cast malloc because the advantage of this method overrides the smaller cost of accidentally suppressing compiler warnings.
I would like to point out 2 things:
- you should write
p = malloc(sizeof(*p)*n);
to always ensure you malloc the right amount of space
- with the above approach, you need to make changes in 3 places if you ever change the type of
p
: once in the declaration, once in the malloc
, and once in the cast.
In short, I still personally believe there is no need for casting the return value of malloc
and it is certainly not best practice.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…