Man page - mcheck(3)

Packages contains this manual

Available languages:

en fr ru ro

Manual

mcheck

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ATTRIBUTS
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

mcheck, mcheck_check_all, mcheck_pedantic, mprobe - Vérifier la cohérence du tas

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <mcheck.h>

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 mĂ©moire malloc (3). Ces fonctions activent des vĂ©rifications de cohĂ©rence de l’état du tas. Ces vĂ©rifications permettent de dĂ©tecter des erreurs telles que libĂ©rer plusieurs fois un bloc de mĂ©moire, ou corrompre les structures internes prĂ©cĂ©dant le bloc de mĂ©moire allouĂ©e.

Pour ĂȘtre active, la fonction mcheck () doit ĂȘtre appelĂ©e avant le premier appel Ă  malloc (3) ou autre fonction associĂ©e. S’il est difficile de s’en assurer, lier le programme avec -lmcheck ajoute un appel implicite Ă  mcheck () (avec un paramĂštre NULL) avant le premier appel Ă  une fonction d’allocation mĂ©moire.

La fonction mcheck_pedantic () est similaire Ă  mcheck (), mais effectue les vĂ©rifications pour tous les blocs allouĂ©s quelque soit la fonction d’allocation mĂ©moire appelĂ©e. Cela peut ĂȘtre trĂšs lent !

La fonction mcheck_check_all () dĂ©clenche une vĂ©rification immĂ©diate de tous les blocs allouĂ©s. Cet appel n’est pris en compte que si mcheck () a dĂ©jĂ  Ă©tĂ© appelĂ©.

Si le systĂšme dĂ©tecte une incohĂ©rence dans le tas, la fonction fournie lors de l’appel dans abortfunc est invoquĂ©e avec un paramĂštre unique, mstatus , qui indique le type d’incohĂ©rence dĂ©tectĂ©e. Si abortfunc est NULL, la fonction par dĂ©faut affiche un message d’erreur sur stderr et appelle abort (3).

La fonction mprobe () effectue une vérification de cohérence du bloc de mémoire allouée pointé par ptr . La fonction mcheck () doit avoir été déjà appelée, ou mprobe () renverra MCHECK_DISABLED .

La liste suivante dĂ©crit les valeurs renvoyĂ©es par mprobe () ou passĂ©es via le paramĂštre mstatus lors de l’appel Ă  mstatus .
MCHECK_DISABLED
(seulement pour mprobe ())

La vĂ©rification de cohĂ©rence n’a pu ĂȘtre effectuĂ©e, car mcheck () n’a pas Ă©tĂ© appelĂ© avant le premier appel Ă  une fonction d’allocation mĂ©moire.

MCHECK_OK (seulement pour mprobe ())

Aucune incohérence détectée.

MCHECK_HEAD

La mémoire précédant immédiatement le bloc alloué a été altérée.

MCHECK_TAIL

La mémoire suivant immédiatement le bloc alloué a été altérée.

MCHECK_FREE

Un bloc de mémoire a été libéré deux fois.

VALEUR RENVOYÉE

mcheck () et mcheck_pedantic () renvoient 0 en cas de succùs, -1 en cas d’erreur.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3885513-1.png

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_ (dĂ©crite dans mallopt (3)) permettent de dĂ©tecter le mĂȘme type d’erreurs. Cependant, MALLOC_CHECK_ ne nĂ©cessite pas de modifier l’édition de liens.

EXEMPLES

L’exemple ci-dessous montre ce qu’il se passe lorsqu’un programme appelle mcheck () avec un paramĂštre NULL puis libĂšre le mĂȘme bloc de mĂ©moire deux fois.

$ ./a.out
About to free
About to free a second time
block freed twice
Abandon (core dumped)

Source du programme

#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
char *p;
if (mcheck(NULL) != 0) {
fprintf(stderr, "échec 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 française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .