Bonjour à tous,
Sujet vaste qu'est l'allocation mémoire, je n'ai pas trouvé de meilleur titre, désolé. :)
Je m'inquiète depuis peu (mieux vaut tard que jamais comme on dit), des fuites de mémoire sur mon projet. J'avais déjà l'habitude de faire assez attention aux malloc/new et aux free/delete, mais j'ai forcément du en oublier par ci par là...
J'aurais donc quelques questions concernant le sujet, je n'ai rien trouvé de précis à ce niveau là sur internet :
- Les fuites de mémoire provoquent une Segfault à partir d'un certain montant de mémoire fixe, ou est-ce aléatoire? (Mon projet à déjà planté à partir de 2.000k de mémoire ou 5.000k, donc je ne sais pas si c'était une mauvaise allocation ou juste que la mémoire "explose");
- J'ai déjà essayé de libérer un char* que j'avais malloc uniquement à 2 (x taille d'un char*...), et BIM Segfault. On ne peut pas libérer les variables trop petites?
- J'utilise pas mal de vecteurs de char*. Comment les libérer efficacement? Uniquement vecteur.clear()? Ou avant ça une boucle pour vider chaque élément?
- J'utilise aussi pas mal de sprintf pour formater mes chaines. Et j'ai un cas qui m'arrive assez souvent, où je récupère dans un char* le résultat d'une méthode, puis je me sert de ce char* (et d'autres) dans un sprintf. Dois-je uniquement libérer le dernier char* (sur lequel on a effectué le sprintf), ou chacuns des éléments le composant?
Dur dur de m'exprimer je vous joins un peu de code pour la dernière question :
Il me faut uniquement libérer string_final une fois que j'aurais appelé ma méthode? Ou faut-il que je libère aussi ses composants string_un et string_deux?Code:
1
2
3
4
5
6
7
8
9
10 char* GetLaString() { char* string_un = MaMethode1(); char* string_deux = MaMethode2(); char* string_final = (char*)malloc(strlen(string_un)+strlen(sting_deux)+2); sprintf(string_final, "%s_%s", string_un, string_deux); return string_final; }
Merci d'avance, et si vous avez des précisions à rajouter, n'hésitez pas :)