With the introduction of void *
pointers in the ANSI/ISO C Standard, explicitly casting the result of a call to malloc
is no longer necessary and may even produce unexpected behavior if #include <stdlib.h>
is forgottennot included.
Non-Compliant Code Example
If stdlib.h
is not included, the compiler makes the assumption that malloc()
has a return type of int
. When the result of a call to malloc()
is then explicitly cast to a pointer type, the compiler will assume assumes that the cast from int
to a pointer type is done with full knowledge of the possible outcomes. This may lead to behavior which is unexpected by the programmer.
...
Code Block |
---|
#include <stdlib.h> ... char *p = malloc(10); |
Exceptions
The return value from malloc()
may be cast in C code that needs to be compatible with C++, where explicit casts from void *
are required.
References
comp.lang.c FAQ list - Question 7.7 http://c-faq.com/malloc/cast.html
comp.lang.c FAQ list - Question 7.7b http://c-faq.com/malloc/mallocnocast.html