Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1092 connectés 

  FORUM HardWare.fr
  Programmation
  C

  question sur les free ..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question sur les free ..

n°1217660
in_your_ph​ion
Posté le 07-10-2005 à 14:33:58  profilanswer
 

salut,
 
mettons que j'ai plusieurs types déja alloués, tel que  :
 

Code :
  1. double * toto;
  2. int * tata;
  3. structure_toute_chelou * bouli;


 
est ce que j'ai le droit de faire :
 

Code :
  1. toto  = (void*)tata = (void*)bouli = NULL;


 
aui lieu de :

Code :
  1. toto  = NULL;
  2. tata = NULL;
  3. bouli = NULL;


 
après avoir fait un free sur les différents bidules ?
 
merci par avance  :love:  :love:  :love:

mood
Publicité
Posté le 07-10-2005 à 14:33:58  profilanswer
 

n°1217668
blackgodde​ss
vive le troll !
Posté le 07-10-2005 à 14:39:37  profilanswer
 

me semble que oui
chez moi ca compile en tout cas
mais je vois pas trop l'intérêt


---------------
-( BlackGoddess )-
n°1217742
Rickou
Posté le 07-10-2005 à 15:19:39  profilanswer
 

Bonjour,
 
Oui ca marche mais il vaut mieux considerer la 2nde solution comme bonne pour la lisibilite.  
La reduction du nombre de lignes de code n'a vraiment aucun interet en programmation.
 
@+

n°1217755
Elmoricq
Modérateur
Posté le 07-10-2005 à 15:26:50  profilanswer
 

Rickou a écrit :

Bonjour,
 
Oui ca marche mais il vaut mieux considerer la 2nde solution comme bonne pour la lisibilite.  
La reduction du nombre de lignes de code n'a vraiment aucun interet en programmation.
 
@+


 
+1
 
Voire, pour plus de lisibilité :
 

double *toto = NULL;
int    *tata = NULL;
structure_toute_chelou *bouli = NULL;


 
 
La lisibilité est extrêmement importante en programmation. Il suffit de revenir sur un programme qu'on a écrit soi-même trois mois plus tard pour s'en convaincre, on a du mal à s'y retrouver. Pour peu que ce soit dur à lire, c'est un calvaire. Et si c'est écrit par un autre, on préfèrerait se tirer une balle dans le pied que de décoder l'bazar.


Message édité par Elmoricq le 07-10-2005 à 15:28:36
n°1217766
Taz
bisounours-codeur
Posté le 07-10-2005 à 15:31:14  profilanswer
 

tu peux aussi te faire une macro zap pour faire le free + NULL

n°1217771
Elmoricq
Modérateur
Posté le 07-10-2005 à 15:32:29  profilanswer
 

Ah oui j'avais pas fait gaffe que c'était pour le free().
 
Ouaip, macro c'est sympa, ou mise à NULL sur la même ligne que le free(), les deux solutions permettant de ne pas dissocier ce qui est en fait une seule action.

n°1217830
chrisbk
-
Posté le 07-10-2005 à 16:29:32  profilanswer
 

Taz a écrit :

tu peux aussi te faire une macro zap pour faire le free + NULL


 
ouais, alors autant la donner, parce que spontanement on va ecrire un truc genre ca :
 

Code :
  1. #define FREE(x) if (x) free(x); x = NULL;


 
 
alors que ca emmene plein d'emmerde
 

Code :
  1. #define FREE(x) {if (x) free(x); x = NULL;}


 
est d'ja un peu mieux
 

n°1217921
Taz
bisounours-codeur
Posté le 07-10-2005 à 17:40:18  profilanswer
 

mais perfectible. et pas qu'un peu
 

Code :
  1. #define FREE(X) do { if (X) free(X); (X) = NULL; } while (0)

n°1217925
Elmoricq
Modérateur
Posté le 07-10-2005 à 17:45:48  profilanswer
 

Si on va par là, on peut également dire qu'une macro de ce genre c'est mal parce qu'on évalue plusieurs fois son paramètre [:petrus75]
 
 
(et le if (x) est superflu)

Message cité 2 fois
Message édité par Elmoricq le 07-10-2005 à 17:46:24
n°1217929
chrisbk
-
Posté le 07-10-2005 à 17:47:55  profilanswer
 

Elmoricq a écrit :

Si on va par là, on peut également dire qu'une macro de ce genre c'est mal parce qu'on évalue plusieurs fois son paramètre [:petrus75]


non, aucun rapport

mood
Publicité
Posté le 07-10-2005 à 17:47:55  profilanswer
 

n°1217934
Elmoricq
Modérateur
Posté le 07-10-2005 à 17:48:53  profilanswer
 

FREE(++x) [:petrus75]

Message cité 1 fois
Message édité par Elmoricq le 07-10-2005 à 17:49:17
n°1217937
chrisbk
-
Posté le 07-10-2005 à 17:50:03  profilanswer
 


fo deja en tenir une couche pour ecrire ca [:pingouino] ca merite la mort lapidation

n°1217941
Taz
bisounours-codeur
Posté le 07-10-2005 à 17:52:11  profilanswer
 

Elmoricq a écrit :

Si on va par là, on peut également dire qu'une macro de ce genre c'est mal parce qu'on évalue plusieurs fois son paramètre [:petrus75]
 
 
(et le if (x) est superflu)


oui c'est de la marne tout ça :)

n°1217946
Elmoricq
Modérateur
Posté le 07-10-2005 à 17:54:45  profilanswer
 

chrisbk a écrit :

fo deja en tenir une couche pour ecrire ca [:pingouino] ca merite la mort lapidation


 
Comme je le disais, si on commence à pinailler, on pinaille loin :o

n°1217975
in_your_ph​ion
Posté le 07-10-2005 à 18:19:16  profilanswer
 

Taz a écrit :

mais perfectible. et pas qu'un peu
 

Code :
  1. #define FREE(X) do { if (X) free(X); (X) = NULL; } while (0)



 
merci pour vos réponses .. c'est quoi l'interet du do ..while ?
 
peut on faire :
 
#define NUKE(X) X ? free(X); (X) = NULL; :  ()
 
genre un truc comme as ?  :lol:  :jap:  :heink:  :sleep:  :sweat:  :sweat:  :sweat:  :sweat:

n°1217992
Elmoricq
Modérateur
Posté le 07-10-2005 à 19:07:29  profilanswer
 

in_your_phion a écrit :

#define NUKE(X) X ? free(X); (X) = NULL; :  ()


 
T'as essayé de compiler ton horreur pour voir ?  [:pingouino]

n°1218034
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-10-2005 à 20:13:51  profilanswer
 

in_your_phion a écrit :

merci pour vos réponses .. c'est quoi l'interet du do ..while ?


Ce do-while ne fait rien. Par contre, comme il manque un ';', il force l'utilisateur à le mettre. Ca rend le code plus cohérent.

Citation :

peut on faire :
#define NUKE(X) X ? free(X); (X) = NULL; :  ()


Après avoir fait le tour de la question, je fais comme ça :  

free (p), p = NULL;


ou éventuellement si on est bien réveillé :  

  FREE (p);


avec  

#define FREE(p) free(p), (p)=NULL


avec les précautions d'usage pour que la double évaluation ne pose pas de problèmes...


Message édité par Emmanuel Delahaye le 07-10-2005 à 20:17:32

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1218134
0x90
Posté le 07-10-2005 à 23:55:34  profilanswer
 

Code :
  1. #define FREE(ptr) do { void **__ptr; __ptr = (void **)&ptr; free(*__ptr) ; *__ptr=NULL; } while (0)


[:cupra]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1218136
chrisbk
-
Posté le 07-10-2005 à 23:56:38  profilanswer
 

1/ pkoi les __ ? t'as le scope pour toi  
2/ pkoi tu passes en ** ?


Message édité par chrisbk le 07-10-2005 à 23:56:53
n°1218206
0x90
Posté le 08-10-2005 à 10:14:56  profilanswer
 

t'as le scope pour toi, mais si t'es con comme moi le 1er truc que tu fais c'est utiliser ptr pour le ptr auxilliaire dans la macro, et utiliser ptr dans le code comme petit pointeur pour tester, et la ca merde :/
Le double c'est plur changer la valeur du pointeur à NULL en pointant sur lui ( en fait il est pas vraiment double, le 1er * c'est parceque tu pointe sur kkchose, et le second parceque le machin que tu pointe sur , c'est un pointeur, mais tu te sers jamais du ** )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1218220
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-10-2005 à 11:03:47  profilanswer
 

0x90 a écrit :

t'as le scope pour toi, mais si t'es con comme moi le 1er truc que tu fais c'est utiliser ptr pour le ptr auxilliaire dans la macro, et utiliser ptr dans le code comme petit pointeur pour tester, et la ca merde :/
Le double c'est plur changer la valeur du pointeur à NULL en pointant sur lui ( en fait il est pas vraiment double, le 1er * c'est parceque tu pointe sur kkchose, et le second parceque le machin que tu pointe sur , c'est un pointeur, mais tu te sers jamais du ** )


http://wbcl.free.fr/images/informatichien_frappadingue.gif


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1218232
0x90
Posté le 08-10-2005 à 11:19:01  profilanswer
 


Et la version verbose ? :whistle:
 

Spoiler :


C'est cool comme ca prends à chaque fois que je poste du code soigneusement pourrifié ^^
( l'alloka fait main en C99 à coup de déclaration de tableau jvous l'avais montré ? [:cupra] )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  question sur les free ..

 

Sujets relatifs
Question sur la programmation C++PB Reinstall copermine sur Free
Question simpleQuestion simplissime
question top con... :)[Question] - Comment lancer un script perl en tache de fond
Derniéres question avant mise en lignePetite question pour utiliser l'hébergement free.fr?
Question con - pb avec free()QUESTION CON, créer son compte chez free?
Plus de sujets relatifs à : question sur les free ..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR