Inkompatible implizite Deklaration der eingebauten Funktion 'malloc'

155

Ich erhalte diesen Fehler:

Warnung: Inkompatible implizite Deklaration der eingebauten Funktion 'malloc'

Ich versuche das zu tun:

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

Nur als Referenz wird folgende Struktur verwendet:

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

Ich sehe nichts falsch an dem, was ich getan habe. Ich erstelle gerade eine tempListmit der Größe von 1 x fileinfo_list.

SGE
quelle

Antworten:

340

Sie haben wahrscheinlich vergessen, aufzunehmen <stdlib.h>.

cnicutar
quelle
1
ahh danke :) bekomme immer noch den Dreh raus von C, das erste C-Programm kommt von Java :)
SGE
nach <stdlib.h>dem Einfügen der Warnung wurde durch einen Fehler ersetzterror: conflicting types for 'malloc'
Christos Karapapas
46

Du musst #include <stdlib.h>. Andernfalls wird definiert, int malloc()welche mit dem integrierten Typ nicht kompatibel ist void *malloc(size_t).

Omri Barel
quelle
Wenn es definiert ist als int malloc(), repliziert es void *malloc(size_t)?
user1343318
@ user1343318 Nicht unbedingt, was genau der Grund für die Warnung ist. Beispiel: Eine x64-Plattform mit 64-Bit-Datenzeigern und 32-Bit- intWerten kotzt Ziegenkot, während ein x86-32 -Bit -Datenzeiger / 32-Bit -Zeiger intscheinbar korrekt funktioniert. Beides ist nicht korrekt, da der Compiler in keinem Fall weiß, was malloctatsächlich zurückgegeben wird, und intals Antwort davon ausgeht .
WhozCraig
15

Du vermisst #include <stdlib.h>.

Antti
quelle
4

Die Datei stdlib.h enthält die Header-Informationen oder den Prototyp der Funktionen malloc, calloc, realloc und free.

Um diese Warnung in ANSI C zu vermeiden, sollten Sie die stdlib-Headerdatei einschließen.

Santosh Sahu
quelle
-4

Die einzige Lösung für solche Warnungen besteht darin, stdlib.h in das Programm aufzunehmen.

user3828152
quelle