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.


Réponses:


340

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


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


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


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.


-4

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.