114 votes

Pourquoi ai-je un avertissement chaque fois que j'utilise malloc?

Si j'utilise malloc dans mon code:

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

Je reçois cet avertissement de gcc :

 new.c: 7: warning: déclaration implicite de la fonction 'malloc'
new.c: 7: attention: déclaration implicite incompatible avec la fonction intégrée 'malloc' incompatible

Je suis nouveau à C. Est-ce que je fais quelque chose de mal?

227voto

sepp2k Points 157757

Vous avez besoin d'ajouter:

#include <stdlib.h>

Ce fichier contient la déclaration de la fonction intégrée malloc. Si vous ne le faites pas, le compilateur vous souhaitez définir votre propre fonction nommée malloc et il vous avertit parce que:

  1. Vous n'avez pas l'indiquer explicitement et
  2. Il y a déjà une fonction intégrée de ce nom qui a une signature différente de celle qui a été déclarée implicitement (lorsqu'une fonction est déclarée implicitement, son retour et les types d'argument sont supposés int, ce qui n'est pas compatible avec le haut- malloc, ce qui prend un size_t et renvoie un void*).

30voto

chaos Points 69029

Vous n'avez pas fait #include <stdlib.h> .

16voto

andri Points 8237

Vous devez inclure le fichier d'en-tête qui déclare la fonction, par exemple:

 #include <stdlib.h>
 

Si vous n'incluez pas ce fichier d'en-tête, la fonction n'est pas connue du compilateur. Donc, il le voit comme non déclaré.

10voto

Tim Williscroft Points 2889

prenez l'habitude de rechercher vos fonctions dans l'aide.

la plupart de l'aide pour C est modelée sur les pages de manuel unix.

homme malloc

donne des résultats assez utiles.

google homme malloc va vous montrer ce que je veux dire.

bien sûr, dans unix, vous obtenez également un propos pour les choses qui sont liées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X