Rechercher : dans
Par :

Fonction free en C

Dernière réponse le 27 oct 2008 à 14:31:45 descoff, le 27 oct 2008 à 14:01:07 
 Signaler ce message aux modérateurs

Bonjour,
j'utilise la fonction free() de cette maniére dans mon programme :

int *p;
if(*p=NULL) {
free(p);
p=NULL;
}

et quand je compile, jai ce message d'erreur qui me géne :
attention : déclaration implicite de la fonction « «free» »

Je voudrais savoir pourquoi j'ai ce message !!
Merci d'avance !
Cdt
descoff

Configuration: Linux
Firefox 3.0.3

Meilleures réponses pour « fonction free en C » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...

1

Fricky42, le 27 oct 2008 à 14:03:15

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/­malloc.3.html

tu dois inclure la lib.
#include <stdlib.h>

mais sinon je ne comprend vraiment pas l'utilite de ton code oO. Tu fais une initialisation dans un if ! oO!!! Le "lol" est aux boulets ce que le ";" est aux programmeurs
b2eda605511811988d04704ed7e809a4

Répondre à Fricky42

2

kilian, le 27 oct 2008 à 14:06:39

Salut,

N'oublie pas d'inclure le header qu'il faut: stdlib.h
Ensuite:

if(*p=NULL) {

Là tu es en train de mettre NULL dans *p et de tester si *p est différent de NULL. Enfin bref ça n'a pas de sens.
Il ne faut pas appeller free si tu n'as pas appelé malloc avant (ou calloc/realloc).
En gros:
#include <stdlib.h>

int main()
{
    int *p; 
    p = (int *)malloc(sizeof(int) * 4);
    *p = 1;
    free(p); 
    p=NULL; 

    return 0;
}
Le gâteau est un mensonge!

Répondre à kilian

3

descoff, le 27 oct 2008 à 14:09:29

Ok il faut inclure stdlib il me semblait bien que j'oubliais quelque chose merci !! et sinon je voulais mettre
if(*p!=NULL) c'est pour sa désolé jme suis trompé !
cdt

Répondre à descoff

4

kilian, le 27 oct 2008 à 14:12:13

*p est de type entier.
Car p est un pointeur vers un entier. Si tu fais *p, tu scrutes ce qu'il y a à cette adresse, c'est à dire un entier. Et un entier ne peut pas être égal à NULL. NULL est de type pointeur.

Pour info, NULL pourrait se définir comme ça:

#define NULL (void *) 0

NULL s'applique toujours à un pointeur, et non pas ce vers quoi il pointe. Le gâteau est un mensonge!

Répondre à kilian

5

Fricky42, le 27 oct 2008 à 14:16:37

OO?

int a;
a = NULL;

est tout a fait recevable. NULL a pour valeur binaire 0. stout...
Ce n'est pas du tout un 'type pointeur'... Le "lol" est aux boulets ce que le ";" est aux programmeurs
b2eda605511811988d04704ed7e809a4

Répondre à Fricky42

6

kilian, le 27 oct 2008 à 14:18:15

Si, essaie de compiler avec l'option -Wall et -W de gcc, ou mieuyx, essaie avec -pedantic.
Essaie aussi de faire ça:

int *a = 0;
Le gâteau est un mensonge!

Répondre à kilian

7

 kilian, le 27 oct 2008 à 14:31:45
  • +1

grep -r "define NULL" glibc-2.7
C:\Documents and Settings\proutprouttagada\Bureau\glibc-2.7\stdlib\gmp-impl.h 
00061: #define NULL ((void *) 0)

Le gâteau est un mensonge!

Répondre à kilian