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.


Odpowiedzi:


340

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


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).


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


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.


-4

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.