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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…