【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\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;
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM