I got a comment to my answer on this thread:
Malloc inside a function call appears to be getting freed on return?
In short I had code like this:
int * somefunc (void) { int * temp = (int*) malloc (sizeof (int)); temp[0] = 0; return temp; }
I got this comment:
Can I just say, please don’t cast the return value of malloc? It is not required and can hide errors.
I agree that the cast is not required in C. It is mandatory in C++, so I usually add them just in case I have to port the code in C++ one day.
However, I wonder how casts like this can hide errors. Any ideas?
Edit:
Seems like there are very good and valid arguments on both sides. Thanks for posting, folks.
It seems fitting I post an answer, since I left the comment 😛
Basically, if you forget to include
stdlib.hthe compiler will assumemallocreturns anint. 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
makes it obvious when you accidentally don’t allocate enough memory because say, you thought
pwasTYPenotTYPE, 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:
p = malloc(sizeof(*p)*n);to always ensure you malloc the right amount of spacep: once in the declaration, once in themalloc, and once in the cast.In short, I still personally believe there is no need for casting the return value of
mallocand it is certainly not best practice.