9
votes

Fichiers de suppression des fuites de mémoire QT avec Valgrind

J'écris habituellement mes classes en C ++ et vérifiez s'ils fuient la mémoire en utilisant Valgrind sur la plate-forme Linux. Je ne suis pas satisfait tant que la mémoire de la mémoire en tas n'est libérée.

Commencer à écrire à Qt, j'ai trouvé combien de fuite vigrind détecte, également sur un projet simple. Ils sont tellement qu'il est difficile de détecter mes mêmes fuites.

J'ai lu quelque part qui est possible d'utiliser un fichier de suppression pour Valgrind, ce qui aide à filtrer les fuites indésirables, mais je ne le trouve pas.

J'utilise Ubuntu 11.04 x64, G ++ 4.5, QT 4.7. Est-ce que quelqu'un sait comment faire face à ce problème?


1 commentaires

Je travaille sur un fichier de suppression pour Qt5 et j'ai supprimé 400000 erros d'ici et il n'y a toujours pas de fin en vue. :-(


3 Réponses :


0
votes

Faites attention à ce que beaucoup de bibliothèques ont des structures d'allocation internes que vous ne serez jamais à nettoyer, et c'est normal.


0 commentaires

6
votes

Avez-vous regardé Ce "Fichier de suppression de valgrication" HOWTO "Wiki ?

Juste pour le compte rendu, il existe certaines bibliothèques sous-jacentes à Qt (en particulier celles du processus de peinture) qui fuient toujours une petite quantité de mémoire. Ce sont ceux dont vous avez besoin pour supprimer.

Comme vous l'avez dit, vous devez d'abord créer un projet minimal, exécutez-le pour créer un fichier de suppression de Valgrind, puis appliquer ce fichier de suppression à votre projet.


1 commentaires

Merci. Donc, je devrais d'abord créer un projet minimal, exécutez-le pour créer un fichier de suppression de Valgrind, puis appliquer ce fichier de suppression à mon projet, non?



-1
votes

J'utilise simplement un fichier de suppression pour supprimer toute la mémoire signalée de la bibliothèque QT comme ceci:

    {
        <QtCore>
        Memcheck:Leak
        ...
        obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6
    }

...


1 commentaires

C'est une mauvaise idée. J'ai trouvé des erreurs dans mon propre code où le nouvel appel réel provient de l'un des conteneurs QT (QHash), donc si vous supprimez toutes les bibliothèques QT, vous allez manquer cela.