Fonction et malloc local - C - Programmation
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);
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 ?
Marsh Posté le 05-07-2004 à 01:32:55
Taz a écrit : quand tu veux. |
tu peux préciser pour le const et le cast inutile ?
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....
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é.
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
Marsh Posté le 05-07-2004 à 08:10:02
a tous
parce que les profs de C qui nous disent de caster les malloc
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
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 |
euh ça fait 15ans en fait. et le simple fait de caster un void* montre qu'on a pas compris à quoi ça sert
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
Marsh Posté le 02-07-2004 à 15:28:55
Salut,
Je dois faire une fonction dont le prototype est :
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 :
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.