Needless pointer-casts in C

前端 未结 12 730
刺人心
刺人心 2020-12-09 10:05

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:



        
12条回答
  •  感动是毒
    2020-12-09 10:45

    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:

    1. you should write p = malloc(sizeof(*p)*n); to always ensure you malloc the right amount of space
    2. 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.

提交回复
热议问题