Несовместимое неявное объявление встроенной функции 'malloc'

155

Я получаю эту ошибку:

предупреждение: несовместимое неявное объявление встроенной функции 'malloc'

Я пытаюсь сделать это:

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

Просто для справки используемая структура:

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

Я не вижу ничего плохого в том, что я сделал. Я просто создаю tempListс размером 1 х fileinfo_list.

SGE
источник

Ответы:

340

Вы, вероятно, забыли включить <stdlib.h>.

cnicutar
источник
1
аааааааа :) все еще изучаю C, первая программа на C пришла из Java :)
SGE
после включения <stdlib.h>предупреждение сменилось ошибкойerror: conflicting types for 'malloc'
Христос Карапапас
46

Тебе нужно #include <stdlib.h>. В противном случае он определяется как int malloc()несовместимый со встроенным типом void *malloc(size_t).

Омри Барел
источник
когда это определено как int malloc(), это копирует void *malloc(size_t)?
user1343318
@ user1343318 Не обязательно, что и является причиной предупреждения. Например: платформа x64 с 64-битными указателями данных и 32-битными intзначениями будет вызывать козлиные испражнения, в то время как 32 -битный указатель данных x86 / 32-битный intможет работать корректно. Ни один из них не является правильным, так как ни в одном из случаев компилятор не знает, что на mallocсамом деле возвращает, и принимает intв ответ.
WhozCraig
4

Файл stdlib.h содержит информацию заголовка или прототип функций malloc, calloc, realloc и free.

Поэтому, чтобы избежать этого предупреждения в ANSI C, вы должны включить заголовочный файл stdlib.

Сантош Саху
источник
-4

Единственным решением для таких предупреждений является включение в программу stdlib.h.

user3828152
источник