/*
自定义的malloc,calloc,realloc,free函数
void **p参数 是存储分配内存地址的变量的地址,根据这个地址与分配内存关联,进行管理
*/
void* MyMalloc(void **p,int size)
{
struct Node *pn=NULL;
(*p)=malloc(size);
if(p==NULL)
return NULL;
pn=InitNode(pn);
if(pn==NULL)
return NULL;
pn->varAddr=p;
pn->size=size;
Push(pn);
return (*p);
}
void* MyCalloc(void **p,int nsize,int usize)
{
struct Node *pn=NULL;
(*p)=calloc(nsize,usize);
if(p==NULL)
return NULL;
pn=InitNode(pn);
if(pn==NULL)
return NULL;
pn->varAddr=p;
pn->size=nsize*usize;
Push(pn);
return (*p);
}
void* MyRealloc(void **p,int size)
{
struct Node *pn=NULL;
(*p)=realloc((*p),size);
if(p==NULL)
return NULL;
pn=InitNode(pn);
if(pn==NULL)
return NULL;
pn->varAddr=p;
pn->size=size;
RemoveChain(p);
Push(pn);
return (*p);
}
void MyFree(void **p)
{
if((*p)==NULL)
return;
free((*p));//释放内存
RemoveChain(p);//把相关节点从链表移除
}
int main()
{
char *p=NULL;
char *p2=NULL;
int *p3=NULL;
InitChain();
p=MyCalloc(&p,100,sizeof(char));
strcpy(p,"abcdefgh...");
p2=MyMalloc(&p2,18*sizeof(char));
p3=MyMalloc(&p3,10*sizeof(int));
p3=MyRealloc(&p3,20*sizeof(int));
MyFree(&p2);
FreeChain();
return 0;
}
上一页 [1] [2] [3]
责任编辑:小草