zoukankan      html  css  js  c++  java
  • 【c语言】分配内存与释放内存

    提示:现在内存区定出一片相当大的连续空间(如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
    ",base,p,a);
        a=Alloc(10);
        printf("base=%p,p=%p,a=%p
    ",base,p,a);
        Free(a);
        printf("base=%p,p=%p,a=%p
    ",base,p,a);
        return 0;
    } 
  • 相关阅读:
    用变量构造函数检查变量类型
    HTML5的File API读取文件信息
    jQuery插件中的this指的是什么
    了解babel
    了解.gitignore
    高德地图画正六边形
    编写可维护性的js读书笔记
    百度地图遇到的问题
    实用的两个移动端demo
    git基本操作总结
  • 原文地址:https://www.cnblogs.com/paprikatree/p/10511692.html
Copyright © 2011-2022 走看看