首页 > 技术文章 > 【c语言】分配内存与释放内存

paprikatree 2019-03-11 16:55 原文

提示:现在内存区定出一片相当大的连续空间(如1000字节)。然后开辟与释放都在此空间进行。假设指针变量p原已指向未用空间的开头,调用alloc(n)后,开辟了n个字节可供程序适使用。现在需要使 p的值变为p+n,表示空白未用区从p+n地址开始,同时要将开辟区的起始地址(p)作为函数值返回,以表示可以利用从此点开始的单元。如果要开辟的区太大(n大),超过了预想的(1000)字符,则alloc(n)函数返回指针NULL,表示开辟失败。

 

#include <stdio.h>

#define LEN (1000)

unsigned char base[LEN];
unsigned char *p=(unsigned char *)base;

void *Alloc(unsigned int n)
{
    unsigned char *pp=p;
    if(p+sizeof(unsigned int)+n<base+LEN&&n>0)
    {
        *(unsigned int*)p=n;
        p+=sizeof(unsigned int)+n;
        pp+=sizeof(unsigned int);
    }
    else
    {
        pp=NULL;
    }
    return pp;
}

void Free(unsigned char *ptr)
{
    if(!ptr)
        return;
    p-=sizeof(unsigned int)+*(unsigned int *)(ptr-sizeof(unsigned int));
}

int main()
{
    unsigned char *a=NULL;
    printf("base=%p,p=%p,a=%p\n",base,p,a);
    a=Alloc(10);
    printf("base=%p,p=%p,a=%p\n",base,p,a);
    Free(a);
    printf("base=%p,p=%p,a=%p\n",base,p,a);
    return 0;
} 

 

推荐阅读