gokcehan gokcehan - 3 months ago 39
C Question

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

When I use

malloc
in a C program, I get a warning:

warning: incompatible implicit declaration of built-in function 'malloc' [enabled by default]


I can then include
<malloc.h>
or
<stdlib.h>
to get rid of the
warning
although it works without it as well.

So I was wondering, what's the difference between these headers and which one does
gcc
links when I don't include anything?


(I'm using
ubuntu 12.04 64-bit
with
gcc 4.6.3
)

Answer

The <malloc.h> header is deprecated (and quite Linux specific, on which it defines non-standard functions like mallinfo(3)). Use <stdlib.h> instead if you simply need malloc(3) and related standard functions (e.g. free, calloc, realloc ....). Notice that <stdlib.h> is defined by C89 (and later) standards, but not <malloc.h>

Look into /usr/include/malloc.h you'll find there some non-standard functions (e.g. malloc_stats(3), etc...) - in addition of malloc....

And gcc don't link header files, but libraries. Read Levine's book about linkers & loaders for more.

If you don't include any headers (and dont explicitly declare malloc yourself, which would be a bad idea), malloc is implicitly declared as returning some int value (which is wrong). I do invite you to pass at least the -Wall flag to gcc when using it.

You might also pass -v to gcc to understand the actual programs involved: cc1 is the compiler proper (producing assembly code), as the assembler, ld the linker, and collect2 an internal utility which invokes the linker.