ccastingmalloc

Difference between two malloc definition of a struct


I would like to know if there's a real difference between this:

c = (struct_t *) malloc(sizeof(struct_t));

and this

c = malloc(sizeof(struct_t *));

Besides avoid the cast, is the compiler takes any advantage in the second form respect the first? Or the two ways are completely the same and is just a "aesthetical" question ?


Solution

  • The first allocates sizeof(struct_t) bytes, the second sizeof(struct_t*) bytes.

    Apart from that, there is no difference in what malloc does, whether you cast the result or not. Casting the result makes the code acceptable to C++ compilers, but it can hide the mistake of not including stdlib.h, therefore it is widely preferred to not cast the result in C.