[C] Pointeur a NULL dans main

Fermé
timekill - 11 juil. 2007 à 10:43
 Utilisateur anonyme - 11 juil. 2007 à 12:07
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.
A voir également:

5 réponses

trinity666 Messages postés 127 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 17 août 2011 2
11 juil. 2007 à 10:46
tu as essayé avec func (&p1)
0
avec func(&p1) j 'ai une erreur a l execution apparemment sur le free()
0
Utilisateur anonyme
11 juil. 2007 à 10:47
printf("%d",p1*);
0
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
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
Utilisateur anonyme > timekill
11 juil. 2007 à 11:17
justement le pb de passage par reference! regarde la reponse 5, et dis moi quoi
0
Utilisateur anonyme
11 juil. 2007 à 11:15
void func(pointeur *p)
{
free(p*);
p*=NULL;
}

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

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

}
0
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
Utilisateur anonyme
11 juil. 2007 à 11:29
et *p, ca marche pas mieux?
0
non pas mieux il bugge a l'execution

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

j'appelle func avec: func(&p1)

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
11 juil. 2007 à 12:07
c'est tordu... mais apres reflexion, c'est plus logique!
0