¿Por qué recibo una advertencia cada vez que uso malloc?

3 minutos de lectura

avatar de usuario
Kredns

si uso malloc en mi código:

int *x = malloc(sizeof(int));

Recibo esta advertencia de gcc:

new.c:7: warning: implicit declaration of function ‘malloc’  
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’

avatar de usuario
sepp2k

Necesitas agregar:

#include <stdlib.h>

Este archivo incluye la declaración de la función incorporada malloc. Si no lo hace, el compilador cree que desea definir su propia función llamada malloc y te avisa porque:

  1. No lo declaras explícitamente. y
  2. Ya existe una función integrada con ese nombre que tiene una firma diferente a la que se declaró implícitamente (cuando una función se declara implícitamente, se supone que sus tipos de retorno y argumento son intque no es compatible con el incorporado mallocque toma un size_t y devuelve un void*).

  • Terminología nit: No existe tal cosa como una función integrada en C. malloc es simplemente una función de la biblioteca estándar de C.

    – Jens

    13/10/2012 a las 14:55

  • @Jens No veo ningún problema en referirme a las funciones de biblioteca estándar como funciones integradas, y aparentemente tampoco la gente de gcc, ya que el mensaje de error también usó la palabra “incorporado” (por eso lo hice).

    – sepp2k

    13/10/2012 a las 15:17

  • @sepp2k Bueno, yo hacer ver un problema. El uso no es estándar. compiladores puede tener funciones integradas y gcc puede tener malloc integrado. Pero como escribí, C ªno hay funciones integradas.

    – Jens

    13/10/2012 a las 15:21


no has hecho #include <stdlib.h>.

avatar de usuario
andri

Debe incluir el archivo de encabezado que declara la función, por ejemplo:

#include <stdlib.h>

Si no incluye este archivo de encabezado, el compilador no conoce la función. Entonces lo ve como no declarado.

avatar de usuario
Tim Williscroft

Acostúmbrese a buscar sus funciones en la ayuda.

La mayor parte de la ayuda para C está modelada en las páginas del manual de Unix.

Utilizando :

man malloc

da resultados bastante útiles.

Googleando man malloc le mostrará lo que quiero decir.

En Unix también obtienes propos para cosas que están relacionadas.

avatar de usuario
RobertS apoya a Mónica Cellio

Además de las otras respuestas muy buenas, me gustaría hacer un pequeño quisquilloso y cubrir algo que aún no se discute en las otras respuestas.


Cuando estás en Linux, para usar malloc() en tu código,

en realidad no lo haces tengo que #include <stdlib.h>.

(Aunque el uso de stdlib.h es muy común y probablemente todos los programas que no sean de juguete deberían incluirlo de cualquier manera porque proporciona una amplia gama de macros y funciones útiles de la biblioteca estándar de C)

también podrías #include <malloc.h> en lugar de.

Pero tenga en cuenta que el uso de malloc.h está en desuso y hace que su código no sea portátil. Si quieres usar malloc() siempre y siempre (excepto por razones explícitas para hacer lo contrario) #include <stdlib.h>.

Las razones por quése explican mejor en las respuestas a esta pregunta:

diferencia entre y

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad