Why do I get a warning every time I use malloc?

后端 未结 5 668
情话喂你
情话喂你 2020-11-28 06:01

If I use malloc in my code:

int *x = malloc(sizeof(int));

I get this warning from gcc:

new.c:7: w         


        
相关标签:
5条回答
  • 2020-11-28 06:24

    You need to include the header file that declares the function, for example:

    #include <stdlib.h>
    

    If you don't include this header file, the function is not known to the compiler. So it sees it as undeclared.

    0 讨论(0)
  • 2020-11-28 06:28

    You need to add:

    #include <stdlib.h>
    

    This file includes the declaration for the built-in function malloc. If you don't do that, the compiler thinks you want to define your own function named malloc and it warns you because:

    1. You don't explicitly declare it and
    2. There already is a built-in function by that name which has a different signature than the one that was implicitly declared (when a function is declared implicitly, its return and argument types are assumed to be int, which isn't compatible with the built-in malloc, which takes a size_t and returns a void*).
    0 讨论(0)
  • 2020-11-28 06:33

    Beside the other very good answers, I would like to do a little nitpick and cover something what is not discussed yet in the other answers.


    When you are at Linux, To use malloc() in your code,

    You don´t actually have to #include <stdlib.h>.

    (Although the use of stdlib.h is very common and probably every non-toy-program should include it either way because it provides a wide range of useful C standard library functions and macros)

    You could also #include <malloc.h> instead.

    But please note that the use of malloc.h is deprecated and it makes your code non-portable. If you want to use malloc() you should always and ever (except for explicit reasons to do otherwise) #include <stdlib.h>.

    The reasons why, are best explained in the answers to this question:

    difference between <stdlib.h> and <malloc.h>

    0 讨论(0)
  • 2020-11-28 06:41

    You haven't done #include <stdlib.h>.

    0 讨论(0)
  • 2020-11-28 06:46

    Make a habit of looking your functions up in help.

    Most help for C is modelled on the unix manual pages.

    Using :

    man malloc
    

    gives pretty useful results.

    Googling man malloc will show you what I mean.

    In unix you also get apropos for things that are related.

    0 讨论(0)
提交回复
热议问题