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

101,868

Solution 1

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*).

Solution 2

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

Solution 3

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.

Solution 4

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.

Share:
101,868

Related videos on Youtube

vishwas kumar
Author by

vishwas kumar

Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies. --Teach Yourself Programming In Ten Years

Updated on July 08, 2022

Comments

  • vishwas kumar
    vishwas kumar almost 2 years

    If I use malloc in my code:

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

    I get this warning from gcc:

    new.c:7: warning: implicit declaration of function ‘malloc’  
    new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
    
  • Mechanical snail
    Mechanical snail over 12 years
    Only if you already know that the line #include <stdlib.h> in the synopsis means you have to write that in your program.
  • Jens
    Jens over 11 years
    Terminology nit: There's no such thing as a built-in function in C. malloc is simply a function from the Standard C Library.
  • sepp2k
    sepp2k over 11 years
    @Jens I don't see a problem with referring to standard library functions as built-ins - and neither do the gcc people apparently since the error message used the word "built-in", too (which is why I did).
  • Jens
    Jens over 11 years
    @sepp2k Well, I do see a problem. The usage is non-standard. Compilers can have built-in functions, and gcc may have malloc built-in. But as I wrote, in C, there are no built-in functions.
  • MikeKulls
    MikeKulls almost 11 years
    If someone has read the other answers here then they will now know that.