Несумісне неявне оголошення вбудованої функції '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;

Я не бачу нічого поганого в тому, що я зробив. Я просто створюю a 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значеннями буде викидати козячий кал, в той час як x86 32 -бітовий покажчик даних / 32-бітовий intможе, здавалося б, працювати правильно. Вони не є правильними, оскільки в жодному випадку компілятор не знає, що mallocнасправді повертається, і передбачає intу відповідь.
WhozCraig


4

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

Щоб уникнути цього попередження в ANSI C, слід включити файл заголовка stdlib.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.