Problème de fuite mémoire

Signaler
Messages postés
7
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
12 octobre 2006
-
Messages postés
7
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
12 octobre 2006
-
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

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Tu es sur que ce programme valgrind marche bien avec la stl ?
Messages postés
7
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
12 octobre 2006

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