Bonjour,
Depuis que j'ai commence la programmation, quand je veux remplir une chaine dans une autre fonction j'envoie le type fonction_de_remplissage(str), et pour liberer ou allouer de la memoire, j'envoie create_or_free(&str).
Je pense ne pas me tromper pour l'allocation de memoire, mais je commence a voir de serieux doutes pour le free, vu que malloc renvoir un pointeur sur adresse, je devrais pouvoir envoyer le pointeur directement, non ? Free ne retournant pas de valeur, et quand on le re print, meme en ayant free on a encore les donnees, j'aimerais que quelqu'un confirme mes doutes afin d'eviter toute perte de memoire a l'avenir.
J'aimerais faire de la facon suivante, car actuellement je fais que des void(&str) pour creer et liberer mes chaines (en recuperant des char *(*str), et autres types, et je voudrais profiter des return en restant dans le 0 perte de memoire.
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 char *create(char *str) { int len; len = 4; str = malloc(len + 1 * sizeof(*str)); return (str); } void full(char *s1, char *s2) { strcpy(s1, s2); } void lib(char *str) { free(str); } int main() { char *str = NULL; str = lib(full(create(str), "toto")); return(0); } /* AU LIEU DE CA, VOILA CE QUE JE FAIS, J'AI JAMAIS EUT DE PROBLEME, MAIS JE TROUVE CA SUPER SALE ! */ void create(char *(*str)) { int len = 4; str = malloc(len + 1 * sizeof(*(*str))); } void full(char *s1, char *s2) { strcpy(s1, s2 } void lib(char *(*str)) { free(*str); } int main() { char *str = NULL; create(&str); full(str, "toto"); lib(&str); return(0); }
Partager