mcheck(3) Library Functions Manual mcheck(3) NOM mcheck, mcheck_check_all, mcheck_pedantic, mprobe - Verifier la coherence du tas BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int mcheck(typeof(void (enum mcheck_status mstatus)) *f); int mcheck_pedantic( typeof(void (enum mcheck_status mstatus)) *f); void mcheck_check_all(void); enum mcheck_status mprobe(void *ptr); DESCRIPTION La fonction mcheck() installe des fonctions de rappel (<< hook >>) pour les fonctions d'allocation memoire malloc(3). Ces fonctions activent des verifications de coherence de l'etat du tas. Ces verifications permettent de detecter des erreurs telles que liberer plusieurs fois un bloc de memoire, ou corrompre les structures internes precedant le bloc de memoire allouee. Pour etre active, la fonction mcheck() doit etre appelee avant le premier appel a malloc(3) ou autre fonction associee. S'il est difficile de s'en assurer, lier le programme avec -lmcheck ajoute un appel implicite a mcheck() (avec un parametre NULL) avant le premier appel a une fonction d'allocation memoire. La fonction mcheck_pedantic() est similaire a mcheck(), mais effectue les verifications pour tous les blocs alloues quelque soit la fonction d'allocation memoire appelee. Cela peut etre tres lent ! La fonction mcheck_check_all() declenche une verification immediate de tous les blocs alloues. Cet appel n'est pris en compte que si mcheck() a deja ete appele. If the system detects an inconsistency in the heap, the caller-supplied function pointed to by f is invoked with a single argument, mstatus, that indicates what type of inconsistency was detected. If f is NULL, a default function prints an error message on stderr and calls abort(3). La fonction mprobe() effectue une verification de coherence du bloc de memoire allouee pointe par ptr. La fonction mcheck() doit avoir ete deja appelee, ou mprobe() renverra MCHECK_DISABLED. The following list describes the values returned by mprobe() or passed as the mstatus argument when f is invoked: MCHECK_DISABLED (seulement pour mprobe()) La verification de coherence n'a pu etre effectuee, car mcheck() n'a pas ete appele avant le premier appel a une fonction d'allocation memoire. MCHECK_OK (seulement pour mprobe()) Aucune incoherence detectee. MCHECK_HEAD La memoire precedant immediatement le bloc alloue a ete alteree. MCHECK_TAIL La memoire suivant immediatement le bloc alloue a ete alteree. MCHECK_FREE Un bloc de memoire a ete libere deux fois. VALEUR RENVOYEE mcheck() et mcheck_pedantic() renvoient 0 en cas de succes, -1 en cas d'erreur. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +----------------------+--------------------------+--------------------+ |Interface | Attribut | Valeur | +----------------------+--------------------------+--------------------+ |mcheck(), | Securite des threads | MT-Unsafe | |mcheck_pedantic(), | | race:mcheck | |mcheck_check_all(), | | const:malloc_hooks | |mprobe() | | | +----------------------+--------------------------+--------------------+ NORMES GNU. HISTORIQUE mcheck_pedantic() mcheck_check_all() glibc 2.2. mcheck() mprobe() glibc 2.0. NOTES Lier le programme avec -lmcheck comme utiliser la variable d'environnement MALLOC_CHECK_ (decrite dans mallopt(3)) permettent de detecter le meme type d'erreurs. Cependant, MALLOC_CHECK_ ne necessite pas de modifier l'edition de liens. EXEMPLES L'exemple ci-dessous montre ce qu'il se passe lorsqu'un programme appelle mcheck() avec un parametre NULL puis libere le meme bloc de memoire deux fois. $ ./a.out About to free About to free a second time block freed twice Abandon (core dumped) Source du programme #include #include #include int main(void) { char *p; if (mcheck(NULL) != 0) { fprintf(stderr, "echec de mcheck()\n"); exit(EXIT_FAILURE); } p = malloc(1000); fprintf(stderr, "About to free\n"); free(p); fprintf(stderr, "\nAbout to free a second time\n"); free(p); exit(EXIT_SUCCESS); } VOIR AUSSI malloc(3), mallopt(3), mtrace(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.18 8 fevrier 2026 mcheck(3)