//检测程序中是否存在内存泄露
#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;
}