Dichiarazione implicita incompatibile della funzione integrata 'malloc'


155

Ricevo questo errore:

avvertenza: dichiarazione implicita incompatibile della funzione integrata 'malloc'

Sto provando a fare questo:

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

Solo per riferimento la struttura usata a portata di mano è:

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

Non vedo nulla di sbagliato in quello che ho fatto. Sto solo creando un tempListcon le dimensioni di 1 x fileinfo_list.


Risposte:


340

Probabilmente hai dimenticato di includere <stdlib.h>.


1
ahh grazie :) sto ancora ottenendo il blocco di C, primo programma C proveniente da Java :)
SGE

dopo aver incluso <stdlib.h>l'avvertimento è stato sostituito da un erroreerror: conflicting types for 'malloc'
Christos Karapapas,

46

È necessario #include <stdlib.h>. In caso contrario, viene definito come int malloc()incompatibile con il tipo incorporato void *malloc(size_t).


quando è definito come int malloc(), si replica void *malloc(size_t)?
user1343318

@ user1343318 Non necessariamente, che è precisamente il motivo dell'avvertimento. Esempio: una piattaforma x64 con puntatori di dati a 64 bit e intvalori di 32 bit genererà feci di capra, mentre un puntatore di dati x86 a 32 bit / 32 bit intsembra funzionare correttamente. sono corretti, come in nessun caso il compilatore è a conoscenza di ciò che malloceffettivamente ritorna e assume intin risposta.
WhozCraig,


4

Il file stdlib.h contiene le informazioni di intestazione o il prototipo delle funzioni malloc, calloc, realloc e free.

Quindi, per evitare questo avviso in ANSI C, è necessario includere il file di intestazione stdlib.


-4

L'unica soluzione per tali avvisi è includere stdlib.h nel programma.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.