Jeśli używam malloc
w moim kodzie:
int *x = malloc(sizeof(int));
Otrzymałem to ostrzeżenie od gcc
:
new.c:7: warning: implicit declaration of function ‘malloc’
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
Musisz dodać:
#include <stdlib.h>
Ten plik zawiera deklarację funkcji wbudowanej malloc
. Jeśli tego nie zrobisz, kompilator pomyśli, że chcesz zdefiniować własną funkcję o nazwie malloc
i ostrzega Cię, ponieważ:
int
, co nie jest zgodne z wbudowaną in malloc
, który przyjmuje a size_t
i zwraca a void*
).
Nie zrobiłeś
#include <stdlib.h>
.źródło
Musisz dołączyć plik nagłówkowy, który deklaruje funkcję, na przykład:
Jeśli nie dołączysz tego pliku nagłówkowego, funkcja nie jest znana kompilatorowi. Więc widzi to jako niezadeklarowane.
źródło
Wyrób sobie nawyk sprawdzania funkcji w pomocy.
Większość pomocy dla C jest wzorowana na stronach podręcznika systemowego unix.
Za pomocą :
daje całkiem przydatne wyniki.
Googling
man malloc
pokaże ci, co mam na myśli.W unixie otrzymujesz również odpowiednie dla rzeczy, które są ze sobą powiązane.
źródło
#include <stdlib.h>
w streszczeniu oznacza, że musisz to napisać w swoim programie.Oprócz innych bardzo dobrych odpowiedzi, chciałbym poszukać czegoś, co nie zostało jeszcze omówione w pozostałych odpowiedziach.
Kiedy jesteś w Linuksie, aby użyć
malloc()
w swoim kodzie,Właściwie nie musisz
#include <stdlib.h>
.(Chociaż użycie
stdlib.h
jest bardzo powszechne i prawdopodobnie każdy program inny niż zabawka powinien zawierać go w obu przypadkach, ponieważ zapewnia szeroką gamę przydatnych funkcji i makr w standardowej bibliotece C)Możesz też
#include <malloc.h>
zamiast tego.Pamiętaj jednak, że użycie rozszerzenia
malloc.h
jest przestarzałe i sprawia, że Twój kod nie jest przenośny. Jeśli chcesz używaćmalloc()
, powinieneś zawsze i zawsze (z wyjątkiem wyraźnych powodów, aby zrobić inaczej)#include <stdlib.h>
.Powody tego najlepiej wyjaśniają odpowiedzi na to pytanie:
różnica między <stdlib.h> i <malloc.h>
źródło