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.

Répondre à