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

  FORUM HardWare.fr
  Programmation
  C

  Fonction et malloc local

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction et malloc local

n°785017
jeremy
Posté le 02-07-2004 à 15:28:55  profilanswer
 

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.
mood
Publicité
Posté le 02-07-2004 à 15:28:55  profilanswer
 

n°785058
Taz
bisounours-codeur
Posté le 02-07-2004 à 15:45:16  profilanswer
 

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);

n°785068
jeremy
Posté le 02-07-2004 à 15:49:57  profilanswer
 

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.
n°785069
Taz
bisounours-codeur
Posté le 02-07-2004 à 15:50:20  profilanswer
 

tu fais pas.

n°786566
xav14
Posté le 05-07-2004 à 01:32:55  profilanswer
 

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 ?

n°786575
bjone
Insert booze to continue
Posté le 05-07-2004 à 02:31:41  profilanswer
 

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
n°786582
matafan
Posté le 05-07-2004 à 04:36:25  profilanswer
 

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é.

n°786594
Taz
bisounours-codeur
Posté le 05-07-2004 à 08:07:46  profilanswer
 

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

n°786595
xav14
Posté le 05-07-2004 à 08:10:02  profilanswer
 

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

n°786596
Joel F
Real men use unique_ptr
Posté le 05-07-2004 à 08:13:46  profilanswer
 

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

mood
Publicité
Posté le 05-07-2004 à 08:13:46  profilanswer
 

n°786599
Taz
bisounours-codeur
Posté le 05-07-2004 à 08:20:34  profilanswer
 

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

n°786616
Joel F
Real men use unique_ptr
Posté le 05-07-2004 à 09:11:19  profilanswer
 

^^ok 15 ...

n°789741
bidoch78
Posté le 08-07-2004 à 00:35:39  profilanswer
 

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


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

  Fonction et malloc local

 

Sujets relatifs
Header "Return-Path:" dans une fonction mail() ?[VB]creer une fonction pour récupére les action sur la molette.??
[GTK+] [resolu] passer un gint en parametre d'une fonction callbackRecupération d'un champ style "toto[1]" dans une fonction javascript
Revenir en arrière : fonction phpFonction AddSlashes
Pb avec la fonction "like"fonction pr lister les tables dune base pgsql ??
Faire un echo ds la partie réservée au arguments dans une fonction ?[MySQL]fonction sum avec plusieurs arguments???
Plus de sujets relatifs à : Fonction et malloc local


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