Les bases de Valgrind
Détecter les fuites et les erreurs
Les bases de Valgrind est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que Valgrind ?
Valgrind est une infrastructure d'instrumentation. Son outil par défaut, Memcheck, détecte les fuites et les erreurs de mémoire sans recompilation, en exécutant votre programme sur un processeur synthétique.
Exécuter Memcheck
Lancez Valgrind devant votre programme. Commencez par compiler avec -g pour obtenir les numéros de ligne.
g++ -g main.cpp -o app
valgrind --leak-check=full ./appDétecter les fuites
Memcheck signale la mémoire encore allouée à la fin de l'exécution et la classe comme définitivement perdue, indirectement perdue ou encore accessible.
#include <cstdlib>
int main() {
int* p = (int*)malloc(40); // never freed -> definitely lost
return 0;
}Catégories de fuites
Comprenez les catégories du rapport.
- Definitely lost : aucun pointeur ne subsiste ; il s'agit d'une véritable fuite
- Indirectly lost : accessible uniquement par l'intermédiaire d'un bloc perdu
- Still reachable : un pointeur existe à la fin de l'exécution (souvent sans conséquence)
Lectures et écritures invalides
Memcheck signale les accès à une mémoire non allouée ou libérée, en indiquant l'adresse et la taille.
#include <cstdlib>
int main() {
int* a = (int*)malloc(2 * sizeof(int));
a[5] = 1; // invalid write past the block
free(a);
return 0;
}Valeurs non initialisées
Memcheck avertit lorsqu'une condition ou une sortie dépend d'une valeur non initialisée, ce qui est une source courante de bogues non déterministes.
#include <iostream>
int main() {
int x; // uninitialized
if (x == 42) // use of uninitialized value
std::cout << "hi\n";
return 0;
}Lire la sortie
Chaque bloc d'erreur affiche l'opération, la trace de pile fautive et, pour les blocs du tas, l'emplacement où la mémoire a été allouée. Le HEAP SUMMARY totalise les allocations et les fuites.
Options utiles
Options courantes :
--leak-check=full: détaille chaque fuite--show-leak-kinds=all--track-origins=yes: suit les valeurs non initialisées jusqu'à leur source--error-exitcode=1: fait échouer l'intégration continue en cas d'erreurs
Valgrind ou ASan
Les deux trouvent des bogues de mémoire, avec des compromis différents.
- Valgrind : aucune recompilation nécessaire, plus lent (d'un facteur 10 à 50), détecte bien les lectures non initialisées
- ASan : recompilation nécessaire, beaucoup plus rapide, meilleure détection des dépassements de pile
Masquer les problèmes connus
Les bibliothèques tierces peuvent produire du bruit. Générez et appliquez un fichier de masquage avec --gen-suppressions=all et --suppressions=file pour faire taire les rapports connus et sans conséquence.
Quand utiliser Valgrind
Utilisez Valgrind lorsque vous ne pouvez pas recompiler avec des désinfecteurs, que vous avez besoin d'un suivi précis des valeurs non initialisées ou que vous souhaitez un deuxième avis. Sinon, ASan est généralement plus rapide pour l'intégration continue courante.
Vérification rapide
Rappelez-vous les catégories de fuites.
Récapitulatif
Vous avez découvert les bases de Valgrind.
- Memcheck détecte les fuites, les accès invalides et les lectures non initialisées, sans recompilation
- Exécutez-le avec
--leak-check=full --track-origins=yes - Types de fuites : définitivement ou indirectement perdues, encore accessibles
- Plus lent qu'ASan, mais excellent pour les bogues liés aux valeurs non initialisées
Questions Fréquemment Posées
La leçon « Les bases de Valgrind » est-elle gratuite ?
Oui — le texte complet de « Les bases de Valgrind » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Les bases de Valgrind » ?
Détecter les fuites et les erreurs Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Les bases de Valgrind » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Utiliser gdb et lldb
- AddressSanitizer
- UBSan et TSan
- Les bases de Valgrind