Fonction et malloc local

Fonction et malloc local - C - Programmation

Marsh Posté le 02-07-2004 à 15:28:55    

Salut,
 
Je dois faire une fonction dont le prototype est :
 

Code :
  1. char *fonction(char *mess);


 
Dans cette fonction, je suis censé modifier certains caractères de mess par des mots. La taille de la chaine en retour est donc variable.
 
En toute logique, à un instant donné, je dois faire un malloc d'une variable locale :
 

Code :
  1. char *fonction(char *mess){
  2.   char *buf;
  3.   ...
  4.   buf=(char *)malloc(size);
  5.   ...
  6.   return buf;
  7. }

Mon problème : si je fais un malloc et que je retourne la chaine après le traitement, quand dois-je faire mon free ?
 
Merci !


Message édité par jeremy le 02-07-2004 à 15:29:38

---------------
Savoir c'est vivre, et maintenir dans l'ignorance, c'est presque un homicide.
Reply

Marsh Posté le 02-07-2004 à 15:28:55   

Reply

Marsh Posté le 02-07-2004 à 15:45:16    

quand tu veux.
 
tu renvoie un pointeur, tu en fais ce que tu veux dans le contexte appelant et qu'en tu sais plus quoi en faire, tu fais un free dessus
 
au passage, le cast est inutile.
et il manque peut être un "const" à ton "const char *message);

Reply

Marsh Posté le 02-07-2004 à 15:49:57    

Ok donc je suis censé faire le free dans la fonction appelante.
 
Comment je peux faire si je veux avoir un appel à cette fonction, sans me soucier de libérer la mémoire après ?


---------------
Savoir c'est vivre, et maintenir dans l'ignorance, c'est presque un homicide.
Reply

Marsh Posté le 02-07-2004 à 15:50:20    

tu fais pas.

Reply

Marsh Posté le 05-07-2004 à 01:32:55    

Taz a écrit :

quand tu veux.
 
tu renvoie un pointeur, tu en fais ce que tu veux dans le contexte appelant et qu'en tu sais plus quoi en faire, tu fais un free dessus
 
au passage, le cast est inutile.
et il manque peut être un "const" à ton "const char *message);


 
tu peux préciser pour le const et le cast inutile ?

Reply

Marsh Posté le 05-07-2004 à 02:31:41    

le (char*) du "buf=(char *)malloc(size);" est uniquement nécessaire en C++. (le C est plus permissif au niveau cast de pointeurs)
 
le const passque tu vas toucher au message, mais retourner une copie +ou- modifiée....


Message édité par bjone le 05-07-2004 à 02:32:16
Reply

Marsh Posté le 05-07-2004 à 04:36:25    

En plus clair le const c'est parce que ta fonction ne modifie par ce qui est pointé par l'argument. Ça ne modifie absolument pas le code généré, mais c'est un garde-fou est c'est une bonne habitude à prendre de mettre des const des qu'un truc n'est pas modifié.

Reply

Marsh Posté le 05-07-2004 à 08:07:46    

bjone a écrit :

(le C est plus permissif au niveau cast de pointeurs)

non, pas permissif. c'est juste qu'en C, le void* n'a pas la même place, et il n'y a pas de problèmede virtualité. bref, c'est du pragmatisme

Reply

Marsh Posté le 05-07-2004 à 08:10:02    

:jap: a tous
 
parce que les profs de C qui nous disent de caster les malloc :o

Reply

Marsh Posté le 05-07-2004 à 08:13:46    

parce que vos profs ont 10 ans de retard et font encore du C K&R :o

Reply

Marsh Posté le 05-07-2004 à 08:13:46   

Reply

Marsh Posté le 05-07-2004 à 08:20:34    

Joel F a écrit :

parce que vos profs ont 10 ans de retard et font encore du C K&R :o

euh ça fait 15ans en fait. et le simple fait de caster un void* montre qu'on a pas compris à quoi ça sert

Reply

Marsh Posté le 05-07-2004 à 09:11:19    

^^ok 15 ...

Reply

Marsh Posté le 08-07-2004 à 00:35:39    

A mon avis, c'est super bancal si tu fais le free() dans ta fonction fonction(). D'apres tout ce que j'ai pu lire la dessus, c'est carrement deconseillé.
 
va faire un tour sur http://membres.lycos.fr/dancel/c/c70_130.htm

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed