Bonjour,
J'utilise une fonction que j'ai trouvé sur developpez, cependant je ne sais pas comment libérer la mémoire des allocations qu'elle me fais puisque je l'utilise dans une fonction à part.
Je vous remercie d'avance !![]()
Bonjour,
J'utilise une fonction que j'ai trouvé sur developpez, cependant je ne sais pas comment libérer la mémoire des allocations qu'elle me fais puisque je l'utilise dans une fonction à part.
Je vous remercie d'avance !![]()
Comme ta fonction renvoie l'adresse retournée par malloc, il suffit simplement de faire un free dessus.
Sinon, dans ta fonction, après ton else, le free est inutile, puisque faire un free sur NULL n'a aucun effet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void bidule(void) { char chaine[] = "hello tout le monde"; char * sub; sub = str_sub(chaine , 5 , 10); if (sub != NULL) { printf("sous-chaine : %s\n" , sub); free(sub); sub = NULL; } ... }
Je te conseille aussi de sécuriser ta fonction en vérifiant que start et end ne provoquent pas de débordement.
Je te conseille également d'éviter les exit sauvages. En principe, il faut remonter l'erreur, afin de bien structurer le programme, et d'éviter à l'OS de libérer lui-même la mémoire allouée par le programme. A chaque malloc doit correspondre un free. Si tu exites ton programme alors qu'il y a eu des allocations dynamiques auparavant, il n'y a aucun free pour eux, et c'est à l'OS de s'en charger (ce qui n'est pas propre, en terme de programmation).
Salut,
J'ai bien fais ce que tu m'as dis sa marche parfaitement sur une fonction et sur ma deuxième, étrangement sa efface avant d'entrer ma variable je te montre :
Avant:
Aprés:
Voilà si tu as une idée ^^
Partager