Declaración implícita incompatible de la función incorporada 'malloc'


155

Recibo este error:

advertencia: declaración implícita incompatible de la función incorporada 'malloc'

Estoy tratando de hacer esto:

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

Solo para la referencia, la estructura utilizada es:

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

No veo nada malo en lo que he hecho. Solo estoy creando una tempListcon el tamaño de 1 x fileinfo_list.


Respuestas:


340

Probablemente olvidó incluir <stdlib.h>.


1
ahh gracias :) todavía estoy acostumbrado a C, el primer programa C viene de Java :)
SGE

después de incluir <stdlib.h>la advertencia fue reemplazada por un errorerror: conflicting types for 'malloc'
Christos Karapapas

46

Usted necesita #include <stdlib.h>. De lo contrario, se define como int malloc()incompatible con el tipo incorporado void *malloc(size_t).


cuando se define como int malloc(), ¿se replica void *malloc(size_t)?
user1343318

@ user1343318 No necesariamente, que es precisamente el motivo de la advertencia. Por ejemplo: una plataforma x64 con punteros de datos de 64 bits y intvalores de 32 bits vomitarán heces de cabra, mientras que un puntero de datos de 32 bits x86 / 32 bits intaparentemente puede funcionar correctamente. Ninguno de los dos es correcto, ya que en ninguno de los casos el compilador es consciente de lo que mallocrealmente regresa y asume inten respuesta.
WhozCraig

15

Que se está perdiendo #include <stdlib.h>.


4

El archivo stdlib.h contiene la información del encabezado o el prototipo de las funciones malloc, calloc, realloc y free.

Entonces, para evitar esta advertencia en ANSI C, debe incluir el archivo de encabezado stdlib.


-4

La única solución para tales advertencias es incluir stdlib.h en el programa.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.