Why do I get a warning every time I use malloc?
CGccMallocWarningsSizeofC Problem Overview
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’
C Solutions
Solution 1 - C
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:
- You don't explicitly declare it and
- 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-inmalloc
, which takes asize_t
and returns avoid*
).
Solution 2 - C
You haven't done #include <stdlib.h>
.
Solution 3 - C
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 - C
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.
Solution 5 - C
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:
https://stackoverflow.com/questions/12973311/difference-between-stdlib-h-and-malloc-h