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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager