Create your own malloc() & free() functions.  when you allocate
memory, allocate a little bit extra memory to add a token of your
choosing.  When free'ing the memory, check that the token is still
there.  You are going to want to add the token to the beginning of the
memory, and not at the end for 2 reasons:
1. When free'ing, you don't know how much memory was allocated, so it
would be difficult to find the end of the memory.
2. If there was a buffer overflow error in the application, it would
likely overwrite your token if it were at the end.
The other thing to consider is that depending on your compiler flags,
memory allocations typically occur at word boundaries to help improve
speed.  Therefore, it would be helpful for the token added to be a
boundary supported by your compiler.

It is still possible that if there is a buffer overflow error in your
application, the token can still be wiped out.

Below are some sample functions that could implement this algorithm.
I used the address of the memory allocated as my token.  I take the
MAX between sizeof(void*) and sizeof(long long) to ensure that the
token size will be compatible with the alignment of most
architectures.  However, you might want to tune this to work better
(or to work at all) for your architecture.

#define MAX(a,b)   (a > b ? a : b)
#define TOKEN_LEN MAX(sizeof(void*), sizeof(long long))

void *my_malloc(size_t size)
{
     void *p = malloc(size + TOKEN_LEN);
     if(p != NULL)
     {
          ((void*)*p) = p;
          p += TOKEN_LEN;
     }
     return p;
}

void *my_free(void *p)
{
     if(p!=NULL)
     {
          p -= TOKEN_LEN;
          if( ((void*)*p) != p )
               // ERROR: Trying to free memory not allocated by
my_malloc() -OR- there was a buffer overflow error
          else
               free(p);
     } else {
          // ERROR: Trying to free NULL
     }
}


On Jul 24, 2:08 pm, "dreamer ................" <igolalal...@gmail.com>
wrote:
> Write a code that will check whether the memory allotted to the
> program at the initial and the memory returned to the system is same
> or not.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algoge...@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to