Niezgodna niejawna deklaracja funkcji wbudowanej „malloc”

155

Otrzymuję ten błąd:

ostrzeżenie: niekompatybilna niejawna deklaracja funkcji wbudowanej „malloc”

Próbuję to zrobić:

fileinfo_list* tempList = malloc(sizeof(fileinfo_list));

Dla porównania, struktura używana pod ręką to:

typedef struct {
    fileinfo** filedata;
    size_t nFiles;
    size_t size;
    size_t fileblock;
} fileinfo_list;

Nie widzę nic złego w tym, co zrobiłem. Po prostu tworzę a tempListo rozmiarze 1 x fileinfo_list.

SGE
źródło

Odpowiedzi:

340

Prawdopodobnie zapomniałeś uwzględnić <stdlib.h>.

cnicutar
źródło
1
ach dzięki :) nadal rozumiem C, pierwszy program w C pochodzi z javy :)
SGE
po włączeniu <stdlib.h>ostrzeżenia został zastąpiony przez błąderror: conflicting types for 'malloc'
Christos Karapapas
46

Musisz #include <stdlib.h>. W przeciwnym razie jest zdefiniowany jako int malloc()niezgodny z typem wbudowanym void *malloc(size_t).

Omri Barel
źródło
kiedy jest zdefiniowany jako int malloc(), czy powiela się void *malloc(size_t)?
user1343318
@ user1343318 Niekoniecznie, co jest dokładnie powodem ostrzeżenia. Na przykład: platforma x64 z 64-bitowymi wskaźnikami danych i 32-bitowymi intwartościami będzie wymiotować kozimi odchodami, podczas gdy 32-bitowy wskaźnik danych x86 / 32-bitowy intmoże pozornie działać poprawnie. Żadne z nich nie są poprawne, ponieważ w żadnym przypadku kompilator nie jest świadomy tego, co mallocfaktycznie zwraca, i zakłada intw odpowiedzi.
WhozCraig
15

Tęsknisz #include <stdlib.h>.

Antti
źródło
4

Plik stdlib.h zawiera informacje nagłówka lub prototyp funkcji malloc, calloc, realloc i free.

Aby uniknąć tego ostrzeżenia w ANSI C, należy dołączyć plik nagłówkowy stdlib.

santosh sahu
źródło
-4

Jedynym rozwiązaniem takich ostrzeżeń jest dołączenie stdlib.h do programu.

user3828152
źródło