Problème de fuite mémoire

franchouze Messages postés 7 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 12 octobre 2006 - 5 juin 2006 à 14:00
franchouze Messages postés 7 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 12 octobre 2006 - 5 juin 2006 à 16:43
Bonjour,



Pour vérifier les fuites mémoires de mon programme j'utilise valgrind.



Voici "l'oubli" de libération détecté par valgrind (ligne avant la stl en gras) :



7393== by 0x8053AE2: std::vector<double,
std::allocator<double> >::push_back(double const&)
(stl_vector.h:564)
7393== by 0x80D07FC: Quadri::calculGeometrieOmbre(double&,
double&, double&, std::vector<double,
std::allocator<double> >&, std::vector<double,
std::allocator<double> >&, std::vector<double,
std::allocator<double> >&, double&, double&,
std::vector<double, std::allocator<double> >&,
std::vector<double, std::allocator<double> >&, int,
int, double&)



Dans ma fonction Quadri, avant appel aux fonctions de la stl, voici la ligne de code fautive :



Hauteur_Hough.push_back( xxx );



où Hauteur_Hough est un vecteur de double et xx est un double.



Je ne comprend pas l'erreur, car normalement, en utilisant les
fonctions push_back etc... je ne devrais pas avoir à me soucier des
allocations. Dans mon programme j'ai d'autres fuites du meme type
lorsque je fais un push_back d'instance d'objet. Je pensais donc que ca
venait de ma façon de construire/détruire mon objet. Mais la, ca me le
fait pour des doubles alors je comprends plus....



Est ce que quelqu un aurait une piste à me fournir pour résoudre mon problème ?



Merci d'avance pour votre aide


Francois

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 juin 2006 à 16:06
Tu es sur que ce programme valgrind marche bien avec la stl ?
0
franchouze Messages postés 7 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 12 octobre 2006
5 juin 2006 à 16:43
Bien deviné !!

Je viens de regarder sur le site de valgrind et il est précisé dans les
FAQ que valgrind sort des erreurs du type "XXbytes in YY blocks are
still reachable"  car la mémoire n'est pas libérée assez tot.

Pour ce que ca interesse, pour eviter ces messages et libérer la
mémoire plus tot, il faut utiliser l'option de compilation 
GLIBCXX_FORCE_NEW
mais il est précisé que ca ralenti les programmes.


Merci pour ton flair luhtor !

Bye
0
Rejoignez-nous