Déclaration implicite incompatible de la fonction intégrée 'malloc'

155

J'obtiens cette erreur:

avertissement: déclaration implicite incompatible de la fonction intégrée 'malloc'

J'essaye de faire ceci:

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

Juste pour la référence, la structure utilisée est:

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

Je ne vois rien de mal à ce que j'ai fait. Je crée juste un tempListavec la taille de 1 x fileinfo_list.

SGE
la source

Réponses:

340

Vous avez probablement oublié d'inclure <stdlib.h>.

cnicutar
la source
1
ahh merci :) toujours comprendre C, premier programme C venant de java :)
SGE
après avoir inclus <stdlib.h>l'avertissement a été remplacé par une erreurerror: conflicting types for 'malloc'
Christos Karapapas
46

Vous devez #include <stdlib.h>. Sinon, il est défini comme int malloc()incompatible avec le type intégré void *malloc(size_t).

Omri Barel
la source
quand il est défini comme int malloc(), est-ce qu'il se réplique void *malloc(size_t)?
user1343318
@ user1343318 Pas nécessairement, c'est précisément la raison de l'avertissement. Ex: une plate-forme x64 avec des pointeurs de données 64 bits et des intvaleurs 32 bits vomira des excréments de chèvre, tandis qu'un pointeur de données x86 32 bits / 32 bits intpeut apparemment fonctionner correctement. Ni l'un ni l'autre ne sont corrects, car dans aucun des cas, le compilateur n'est conscient de ce mallocqui retourne réellement et suppose inten réponse.
WhozCraig
15

Vous avez disparu #include <stdlib.h>.

Antti
la source
4

Le fichier stdlib.h contient les informations d'en-tête ou le prototype des fonctions malloc, calloc, realloc et free.

Donc, pour éviter cet avertissement dans ANSI C, vous devez inclure le fichier d'en-tête stdlib.

santosh sahu
la source
-4

La seule solution pour de tels avertissements est d'inclure stdlib.h dans le programme.

user3828152
la source