On Friday 02 August 2002 13:13, Marc SCHAEFER wrote:
> On Fri, 2 Aug 2002, Daniel Cordey wrote:
> > mais je crois qu'il existe une librairie en libre qui �vite ce le
> > probl�me
>
> il me semble que c'est:
>
> schaefer@defian:~% apt-cache show electric-fence
> Package: electric-fence
> Description: A malloc(3) debugger
> Use virtual memory hardware to detect illegal memory accesses.
>
> la plupart des *BSD semblent l'avoir par d�faut.
C'est certainement tr�s utile pour le debugging. Un sous-ensemble de QCQ
d'�quivalent � des produits commerciaux sous Linux qui ajoutent du code pour
tracer toute utilisation de pointeur (dereferencing, operators, etc.).
Mais en fait, je viens de voir que la libc poss�de un flag qui �vite au moins
le probl�me du double free() avec la meeme valeure de pointeur. Il est
judicieux de compiler son code avec ce flag et de tourner toute sa suite de
test avec. On peut toujours recompiler uen version release sans le flag si
l'on chasse les nanos secondes.
Perso, je laisserais ce flags en permanence, pour �tre certain de mettre le
doigt SUR LE probl�me quand il se pr�sente. Comme il est dit dans la derni�re
phrase, "...a crash may happen much later, and the true cause for the
problem is then very hard to track down." Et croyez-moi... much later.. c'est
vrai, et on oublie de pr�ciser que l'erreur se produit � un endroit de votre
code qui n'a rien � voir avec le pointeur incrimin�. Et... "... very hard..."
est un euph�misme :-(
Daniel
The Unix98 standard requires malloc(), calloc(), and real�
loc() to set errno to ENOMEM upon failure. Glibc assumes
that this is done (and the glibc versions of these rou�
tines do this); if you use a private malloc implementation
that does not set errno, then certain library routines may
fail without having a reason in errno.
Crashes in malloc(), free() or realloc() are almost always
related to heap corruption, such as overflowing an allo�
cated chunk or freeing the same pointer twice.
Recent versions of Linux libc (later than 5.4.23) and GNU
libc (2.x) include a malloc implementation which is tun�
able via environment variables. When MALLOC_CHECK_ is
set, a special (less efficient) implementation is used
which is designed to be tolerant against simple errors,
such as double calls of free() with the same argument, or
overruns of a single byte (off-by-one bugs). Not all such
errors can be proteced against, however, and memory leaks
can result. If MALLOC_CHECK_ is set to 0, any detected
heap corruption is silently ignored; if set to 1, a diag�
nostic is printed on stderr; if set to 2, abort() is
called immediately. This can be useful because otherwise
a crash may happen much later, and the true cause for the
problem is then very hard to track down.
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.