Pb self sur un pointeur en C

duco -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je cherche a faire un self sur un pointeur, de cette maniere :

void libererPointeur(int *p) {
if(*p != NULL) {
free(self);
*self=NULL;
printf("liberationt ok\n");
}
else printf("erreur");
}

Cela peut il marcher ou non ?
Merci
A voir également:

6 réponses

Manu
 
Bonjour,

Bien sûr que ça peut marcher,... avec un peu de chance.

Pour vous aider ça va être difficile si vous n'expliquez pas ce que vous voulez faire.

je cherche a faire un self

C'est quoi un self ? (ou en quel langage est-ce écrit ?)

void libererPointeur(int *p) {
if(*p != NULL) {


Pourquoi ce NULL alors que vous définissez *p comme un entier ?

free(self);

Quel est le rapport entre ce self et le reste du programme ?

free(self);
*self=NULL;


Là il vous faut de la chance, après vous être débarrassé du self, vous aurez du mal à y mettre du NULL.

else printf("erreur")

Ca c'est probablement juste.

Manu
1
duco
 
Bonjour,
alors oui je me suis mal exprimer : donc mon pointeur p pointe en fait sur une structure, pas sur un entier .... donc en fait je cherche en gros a detruire cette structure, donc a la mettre a NULL, est-ce juste ?
aprés je vérifie donc si elle est déja NULL ou pas, si oui c'est une erreur, sinon je la supprime ...
en gros on peut considerer cette fonction comme un destructeur ...
Merci de m'aider !
0
duco
 
Personne pour m'aider ??? merci d'avance ...
0
friday
 
Bonjour,
alors oui je me suis mal exprimer : donc mon pointeur p pointe en fait sur une structure, pas sur un entier .... donc en fait je cherche en gros a detruire cette structure, donc a la mettre a NULL, est-ce juste ?
aprés je vérifie donc si elle est déja NULL ou pas, si oui c'est une erreur, sinon je la supprime ...
en gros on peut considerer cette fonction comme un destructeur ...
Merci de m'aider !
0
Manu
 
Rebonjour,

vous avez juste à faire free(p), tout le reste est inutile.

Manu
0

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

Posez votre question
friday
 
le probleme c'est qu'il faut que je retourne une erreur si il est deja vide, donc je dois quand meme faire un if ...
donc en gros ce que j'avais fait initialement c'est ce qu'il faut faire ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
déjà, il ne faut pas confondre un pointeur et la valeur pointée.
Il faut donc tester directement la valeur du pointeur.
void libere(void* p)
    {
     if(p==0)
     perror("déjà  liberer\n");
     else
         {
          free(p);
          p=0;
          }
    }
(code non tester)
0