Fonction free en C

descoff -  
kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   -
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

3 réponses

  1. descoff
     
    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
    2
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      *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.
      -1
      1. Fricky42 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   182 > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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'...
        -1
      2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > Fricky42 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention  
         
        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;
        -1
      3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > Fricky42 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention  
         
        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)

        0
  2. Fricky42 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   182
     
    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!!!
    1
  3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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;
    }
    
    1