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(void (*abortfunc)(enum mcheck_status mstatus)); int mcheck_pedantic(void (*abortfunc)(enum mcheck_status mstatus)); 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. Si le systeme detecte une incoherence dans le tas, la fonction fournie lors de l'appel dans abortfunc est invoquee avec un parametre unique, mstatus, qui indique le type d'incoherence detectee. Si abortfunc est NULL, la fonction par defaut affiche un message d'erreur sur stderr et appelle 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. La liste suivante decrit les valeurs renvoyees par mprobe() ou passees via le parametre mstatus lors de l'appel a mstatus. 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() | | | +----------------------+--------------------------+--------------------+ STANDARDS 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 Aborted (core dumped) Source du programme #include #include #include int main(void) { char *p; if (mcheck(NULL) != 0) { fprintf(stderr, "mcheck() failed\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 et David Prevot 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.06 31 octobre 2023 mcheck(3)