OVH Cloud OVH Cloud

Leak dans string ?

11 réponses
Avatar
Frouin Jean-Michel
Bonjour je compile le programme suivant avec un leak detector maison qui
attrape les new et delete.
Mon programme main contient :

#include <string>

#ifdef LEAK_DETECTION
#include <leak/leak.h>
#endif

int main(int argc, char** argv)
{

std::string s;
s.assign("bob");
return 1;
}

J'obtient un leak :
delete : File : (null), Line : 0, Address : 0x804c200
et avec leaktracker (un outil de leak sous linux car je développe sous
linux donc avec g++ :
version gcc 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
) :

# LeakReport
# from new @ | size # Pointer Addr
L 0xb7e1548a 16 # 0x804c200
# total allocation requests: 1 ; max. mem used 0 kBytes
# leak 16 Bytes :-(

Je ne comprends pas pourquoi il me reporte un leak ... peut être
j'utilise mal les string ?
Merci de me donner un coup de main :D

PS : Je suis en train de lire la fac C++ fr mais je ne vois pas la
réponse à ma question surtout que dedans je lis qu'il vaut mieux
utiliser les std::string plutot que les char* :D

1 réponse

1 2
Avatar
James Kanze
Jean-Marc Bourguet wrote:
Frouin Jean-Michel writes:

Je ne comprends pas pourquoi il me reporte un leak ...


Les objets de la bibliothèque standard utilisent souvent des
pools. Donc à moins que tu n'arrives à les forcer à rendre
toute la mémoire -- là regarde la doc de ton système --, il
est fort probable que tu voies comme leak de la mémoire qui
est toujours référencées par une variable statique et qui
serait réutilisé pour une autre chaîne.


Dans le temps (je ne sais pas si ça vaut encore), il y avait une
option qu'on pouvait donner pour que la bibliothèque standard de
g++ utilise malloc/free, et non operator new/operator delete. Ce
qui pourrait contourner le problème pour Jean-Michel, s'il ne
s'agit qu'un remplacement des opérateurs globaux.

Sinon, ayant suivi un chemin semblable dans mon propre code, il
pourrait jeter un coup d'oeil sur ma solution, dans le code à
ma site (http://kanze.james.neuf.fr/code-fr.html). La
documentation de ma classe MemoryCheck dans le sous-système Port
(http://kanze.james.neuf.fr/doc/en/Test/html/index.html), ainsi
que son utilisation dans les tests qui accompagnent la plupart
des composants (voir surtout l'utilisation de makemakeOpts dans
les fichiers de GNUmakefile, ainsi que la définition des classes
dont elle déclenche l'utilisation).

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2