home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <limits.h>
-
- #define ALIGN sizeof(double)
-
- char *my_malloc( int size){
- char *ptr;
- double *dpt;
- float *fpt;
- int *ipt;
-
- size = ( (size+ALIGN-1) / ALIGN) * ALIGN;
- size = (size+4*sizeof(double)+sizeof(int)+sizeof(float));
-
- ptr = (char *)malloc(size);
- /*
- * front padding
- */
- dpt = (double *)ptr;
- *dpt = DBL_MAX;
- /*
- * save the array_size
- */
- ipt = (int *)(ptr + sizeof(double));
- *ipt = size;
- /*
- * head padding
- */
- fpt = (float *)(ptr + sizeof(double)+sizeof(int));
- *fpt = FLT_MAX;
- dpt = (double *)(ptr + sizeof(double)+sizeof(int)+sizeof(float));
- *dpt = DBL_MIN;
- dpt ++;
- *dpt = DBL_MAX;
- /*
- * tail padding
- */
- dpt = (double *)(ptr +size -sizeof(double));
- *dpt = DBL_MAX;
- /*
- * returned pointer
- */
- ptr = (char *)(ptr + 3*sizeof(double)+sizeof(int)+sizeof(float));
- return(ptr);
- }
-
- int my_free( char *ptr){
- int this_size, nerr, i;
- double *dpt;
- float *fpt;
- int *ipt;
- char *this;
-
- nerr =0;
- this = (char *)(ptr -(3*sizeof(double)+sizeof(int)+sizeof(float)));
-
- /*
- * CHECKING front padding
- */
- dpt = (double *)(this);
- if( (*dpt) != DBL_MAX ) {
- fprintf( stderr, "Error: overwrote FRONT of freed array\n");
- nerr++;
- }
- /*
- * CHECKING size allocated
- */
- ipt = (int *)(this + sizeof(double));
- if( (this_size = *ipt) <= 0 ) {
- fprintf( stderr, "Error: array size is negative\n");
- nerr++;
- }
- /*
- * CHECKING head padding
- */
- fpt = (float *)(this + sizeof(double) + sizeof(int));
- if( ((*fpt) != (float)FLT_MAX) ) {
- fprintf( stderr, "Error: overwrote FLT_HEAD of freed array\n");
- nerr++;
- }
- dpt = (double *)(this + sizeof(double) + sizeof(int) + sizeof(float));
- if( ((*dpt) != DBL_MIN ) ) {
- fprintf( stderr, "Error: overwrote DBL_MIN of freed array\n");
- nerr++;
- }
- dpt ++;
- if( ((*dpt) != DBL_MAX ) ) {
- fprintf( stderr, "Error: overwrote DBL_HEAD of freed array\n");
- nerr++;
- }
- /*
- * CHECKING tail padding
- */
- dpt=(double *)(this + this_size -sizeof(double));
- if( (*dpt) != DBL_MAX ) {
- fprintf( stderr, "Error: overwrote TAIL of freed array\n");
- nerr++;
- }
- if( nerr) {
- exit(-1);
- }
- free(this);
- return(0);
- }
-