检测程序中是否存在内存泄露

//检测程序中是否存在内存泄露
#include <stdio.h>
#include <stdlib.h>
#define N 100
//定义保存分配内存的信息结构
typedef struct 
{
void * addr;//内存地址
int    bytes;//内存大小
int    flag;//内存是否释放状态(0:未释放,1:释放)
}memstr;
memstr  ms[N];//全局数组记录内存分配情况
int index=0;//全局下标
void*  mymalloc(int n,size_t size)
{
   void* tmp=malloc(n*size);
   if(tmp!=NULL)
   {
  ms[index].addr=tmp;
  ms[index].bytes=n*size;
  ms[index].flag=0;
  index++;
   }
   return tmp;
}
void myfree(void * addr)
{
if(addr!=NULL)
{
int i=0;
for(i=0;i<index;i++)
{
if(ms[i].addr==addr)
{
free(addr);
addr=NULL;
//ms[i].addr=NULL;
ms[i].bytes=0;
ms[i].flag=1;
break;
}
}
}
}
void  printmem()
{
int i=0;
for(i=0;i<index;i++)
{
if(ms[i].flag==0)
{
printf("addr=%X is not free size=%d\n",ms[i].addr,ms[i].bytes);
myfree(ms[i].addr);
}
else
{
printf("addr=%X is free\n",ms[i].addr);
}
}
}
int main(int argc, char *argv[])
{
int *p1=(int*)mymalloc(4,sizeof(int));
    int *p2=(int*)mymalloc(10,sizeof(int));
char *p3=(char*)mymalloc(4,sizeof(char));
myfree(p2);
printmem();
return 0;
}
posted @ 2013-11-24 23:29  wangxiangshang  阅读(478)  评论(0编辑  收藏  举报