[C] Pointeur a NULL dans main

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

  • Votes
  • Date
  • Date décroissante
  1. c'est tordu... mais apres reflexion, c'est plus logique!
    1. et *p, ca marche pas mieux?
      1. non pas mieux il bugge a l'execution

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

        j'appelle func avec: func(&p1)

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

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

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

      }
      1. 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
    3. printf("%d",p1*);
      1. Tu veux dire printf("%d",*p1); ?

        Mais la valeur sur laquelle le pointeur est, va etre a 0 mais pas le pointeur lui-meme
      2. 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
      3. @timekilljustement le pb de passage par reference! regarde la reponse 5, et dis moi quoi
    4. tu as essayé avec func (&p1)
      1. avec func(&p1) j 'ai une erreur a l execution apparemment sur le free()