From: Garry Turkington <gary@reddwarf.qub.ac.uk>

Now something constructive..  as has been seen here I've been tracking
down a large memory leak recently, which is now officillly squashed.
During the process of finding it though I got fed up with liberally
sprinkling the code with log/bug messages, and came up with this addition
to interpret() which I find useful.  Basically it compares the number of
allocated strings and perm blocks after a command is executed to the
number prior to execution and if there has been an increase flags this on
a new wiznet channel.  Now, the observant among you will notice that this
will flag a hell of a lot of olc commands which by their very nature
allocate new memory, plus lots of common commands which during their
execution may need a block of  a size currently not around so it's
allocated.  This in mind though,  seeing a command that shouldnt be
alocating flagging on wiznet say 3 times in a row canbe a pretty darn good
indication that maybe you should look at the code.  Your mileage may of
course vary.

You'll need to create a new wiznet channel and also make  nAllocString and
nAllocPerm accessible in interp.c
At the top of interpret()

int string_count = nAllocString ;
int perm_count = nAllocPerm ;
char cmd_copy[MAX_INPUT_LENGTH] ;
char buf[MAX_STRING_LENGTH] ;

then somewhere before the command is processed.. 
strcpy(cmd_copy, argument) ;

then after the command is dispatched:

if (string_count < nAllocString)
{
sprintf(buf,
"Memcheck : Increase in strings :: %s : %s", ch->name, cmd_copy) ;
wiznet(buf, NULL, NULL, WIZ_MEMCHECK,0,0) ;
}

if (perm_count < nAllocPerm)
{
sprintf(buf,
"Increase in perms :: %s : %s", ch->name, cmd_copy) ;
wiznet(buf, NULL, NULL, WIZ_MEMCHECK, 0,0) ;
}

And that should do it.. it's helped me find some little faux pas from the
early days of my Rom coding when I obviously didn't understand memory
recycling half as well as I thought I did. :)

Garry