Несовместимое неявное объявление встроенной функции '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.


Ответы:


340

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


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.