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