[C] Pointeur a NULL dans main

timekill -  
 Utilisateur anonyme -
Bonjour a tous,

J'ai un petit pb en C. (je travaille avec cygwin)

J'ai un main dans lequel je declare un pointeur, j appelle une fonction qui prend en param mon pointeur et qui libere sa memoire allouée et qui le met a NULL. Qd je vérifie dans le main, la mémoire allouée a bien été vidée met le pointeur n'est pas a NULL.

je vais résumer tout ca en un petit prog.

void func(pointeur *p)
{
free(p);
p=NULL;
}

main.c
{
pointeur *p1 = malloc(....);

func(p1);
printf("%d",p1);

}

le printf me rend une valeur alors cela devrait etre 0

je vous remercie d avance.
Configuration: Windows 2000
Firefox 2.0.0.4

5 réponses

  1. trinity666 Messages postés 131 Statut Membre 2
     
    tu as essayé avec func (&p1)
    0
    1. timekill
       
      avec func(&p1) j 'ai une erreur a l execution apparemment sur le free()
      0
  2. Utilisateur anonyme
     
    printf("%d",p1*);
    0
    1. timekill
       
      Tu veux dire printf("%d",*p1); ?

      Mais la valeur sur laquelle le pointeur est, va etre a 0 mais pas le pointeur lui-meme
      0
    2. timekill
       
      Si je copie exactement le contenu de la fonction dans le main en l applicant a p1 c'est OK, je ne comprends pas pourquoi l instruction p=NULL ne se repercute pas
      0
      1. Utilisateur anonyme > timekill
         
        justement le pb de passage par reference! regarde la reponse 5, et dis moi quoi
        0
  3. Utilisateur anonyme
     
    void func(pointeur *p)
    {
    free(p*);
    p*=NULL;
    }

    main.c
    {
    pointeur *p1 = malloc(....);

    func(&p1);
    printf("%d",p1);

    }
    0
    1. timekill
       
      Merci pour ta reponse. J'ai fait comme tu m'as dit mais ca bugge a la compil
      error: parse error before ')' token
      error: invalid operands to binary *

      apparemment il ne cpd pas l'etoile, je compile avec gcc je sais pas si ca influe
      0
  4. Utilisateur anonyme
     
    et *p, ca marche pas mieux?
    0
    1. timekill
       
      non pas mieux il bugge a l'execution

      error: incompatible type for argument 1 of `free'
      0
    2. timekill
       
      en fait c 'est bon j 'ai trouvé

      j'appelle func avec: func(&p1)

      et void func(pointeur ** p)
      {
      free(*p);
      *p=NULL;
      }
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    c'est tordu... mais apres reflexion, c'est plus logique!
    0