【c语言】分配内存与释放内存
2024-10-10 12:19:22
提示:现在内存区定出一片相当大的连续空间(如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>)
{
*(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();
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 ;
}
最新文章
- Oozie 快速入门
- poj 3190 Stall Reservations
- WPF感悟
- java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板
- Oracle 导出HTML
- 依法使用Linux,反对Linux国产化
- 图片缩放+拖动(html)
- java 设计模式之工厂模式与反射的结合
- 在java中和javascript中过滤掉类似于img形式的字符串,从而不显示图片
- 用Spark学习FP Tree算法和PrefixSpan算法
- Shell脚本的颜色样式及属性控制
- 循环赛日程编排c代码
- AppCan移动开发技巧:3步走,获取移动APP签名信息
- (python数据分析)第03章 Python的数据结构、函数和文件
- C语言常用标准库函数
- A Spectral Technique for Correspondence Problems Using Pairwise Constraints
- sencha touch 开发环境搭建(视频)
- 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)
- (转)Jupyter notebook入门教程(上,下)
- [翻译] OrigamiEngine