www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/07/07/09:31:07

Message-Id: <9707071300.AA17833@sun4nl.NL.net>
Date: Mon, 7 Jul 1997 12:22:00 +0200
From: Rob den Boer <rob DOT den DOT boer AT derijke DOT nl>
Subject: AW: Memory Leak patch Please.
To: b2042026 <b2042026 AT est DOT fib DOT upc DOT es>
Cc: djgpp <djgpp AT delorie DOT com>
Mime-Version: 1.0

------ =_0_MIME_Boundary_278.33c0eae7.im4opx70.NTSPIJK


Hi all,


The attached file MEMCHK.ZIP contains the memchk.c source.
With this you can track down memory bugs, like not freeing pointers,   
using wrong pointers etc.

It's adapted from an old piece of code published in DDJ back in the 90's,   
and made it work with DJGPP.

You can use it as follows:
1. after your regular #include's add:
#define MEM_DEBUG 1
#include "memchk.c"


2. first thing in your main:
#ifdef MEM_DEBUG
 mem_check_init();
#endif

3. run your program!
4. check the file MEMCHK.LOG

If all is well, the logfile will show something like this:
Summary:
Total allocated memory  : 0 bytes
Memory usage maximum    : 11880 bytes
Number of pointers used : 70
total Bitmaps           : 861448 bytes, 85 x

The 'total' allocated should be 0, otherwise you have a memory leak. You   
will see when things go wrong. Checks are done for:

1. malloc calls returning NULL pointers
2. multiple allocating of the same pointer
3. freeing a null pointer
4. freeing a pointer multiple times
5. bounds check (not 100% proof, see below)

Use #define MEM_DEBUG_ALL to see all allocations/free's in your program.
remove the MEM_DEBUG defines when your programs works great and you want   
to compile the final version, this leaves out all checking code.


How does it work?
The init function installs an atexit function, which does the end   
reporting.
This code keeps an administration of all malloc/calloc/free calls, and   
keeps track of memory. To 'catch' the malloc/free calls in your program,   
memchk.c #defines malloc/calloc/free and replaces them with it's own   
custom versions.
For each allocation there's a MEMHDR structure, which is linked into a   
list.
Bounds checking is done by putting a magic value before and after the   
allocated memory area. Usually when you move outside the allocated memory   
area, you will touch the magic values, and this will be detected. It's   
not 100% proof, because you can skip them, but it's neat when it's   
detected.

I quickly re-wrote this for my own use, because I had the same problems   
as you. Therefore it's not finished yet, like the strdup function doesn't   
work yet, and it doesn't work on multiple sourcefiles yet. I have to   
split it into a .c/.h for that.
The BITMAP thing is for Allegro, it only counts how much was used for   
bitmaps. (it's no use tracking them down, because Allegro free's them on   
exit).


regards
Rob den Boer

[[ MEMCHK.ZIP : 2101 in MEMCHK.ZIP ]]  

------ =_0_MIME_Boundary_278.33c0eae7.im4opx70.NTSPIJK
Content-Type: application/octet-stream; name="MEMCHK.ZIP"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="MEMCHK.ZIP"

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

------ =_0_MIME_Boundary_278.33c0eae7.im4opx70.NTSPIJK--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019