求助:用C语言指针编写一个函数alloc(n) 在内存区开辟和释放一个连续空间分类:电脑/网络程序设计其他编程语言
问题描述:
求助:用C语言指针编写一个函数alloc(n) ,用来在内存区开辟一个连续的空间(n个字节) 。此函数的返回值是一个指针, 只想新开辟的连续空间的起始地址 。再写一个函数free(p),将起始地址p开始的各单元释放(不能再被程序使用 ,除非再度开辟) 。提示:现在内存区定出一片相当大的连续空间(如1000字节) 。然后开辟与释放都在此空间进行 。假设指针变量p原已指向未用空间的开头,调用alloc(n)后,开辟了n个字节可供程序适使用 。现在需要使 p的值变为p+n,表示空白未用区从p+n地址开始,同时要将开辟区的起始地址(p)作为函数值返回,以表示可以利用从此点开始的单元 。如果要开辟的区太大(n大),超过了预想的(1000)字符,则alloc(n)函数返回指针NULL,表示开辟失败 。本人新学C 高手帮帮忙 谢谢~!
解析:
char _gacMemBlk[1000];
char * _gpcMemBlkBgn = _gacMemBlk;
int _giPos = 0;
void * alloc(int n)
{
if (1000 - _giPosn)
return NULL;
char * p = _gpcMemBlkBgn + _giPos;
_giPos += n;
return (void *)p;
}
void free(void * p)
{
}
注:alloc, free不像你描述的那么简单,其实每次分配还要用一个连表记录下来其位置和大?。?而每次分配不一定要从末尾开始分,而是在连表中找一块空白的,分一砣,剩下的又是一块插到连表中,而释放的时候,如果前后更好挨着 , 则需要合并
C语言:编写一个函数new 对n个字符开辟连续的存储空间在纯粹C编译器下,用new作函数名是可以的,但在与C++兼容的编译器下,是不可能通过编译的,因为new是C++的申请内存操作符 , 属保留字,不能由用户用作标识符 。这里将new改为mynew,举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
char *mynew(int n){
char *p;
if(p=(char *)malloc(n))
return p;
else return NULL;
}
int main(void){
char *p=mynew(20);//申请20个连续字节空间
if(p){//若申请成功
strcpy(p,"1234567890");//向申请的空间写入字符串
printf("%s\n",p);//打出来看看
free(p);//释放申请的空间
}
else printf("Application memory failure...\n");
return 0;
}
c语言程序中开辟空间#includestdio.h
#includestdlib.h
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList Init()
{
LinkList L = NULL;
printf("%d ",L);
L=(LinkList)malloc(sizeof(Lnode));
printf("%d ",L);
L-next=0;
return L;
}
void main()
{
LinkList A = NULL;
printf("%d ",A);
A = Init();
}
【c语言开辟存储空间的函数 c语言 存储空间】关于c语言开辟存储空间的函数和c语言 存储空间的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- flutter设计框架,flutter 界面设计
- mp3u盘怎么下载音乐,u盘怎么下载歌曲
- oracle表空间限额,oracle表空间无限制
- chatgpt辅助游戏开发,game辅助
- java代码传go代码 java代码转smali
- 多硬盘怎么重装,硬盘怎么重装驱动
- 虚拟主机可以升级吗,虚拟主机可以升级吗知乎
- sqlserver自营,sql server自带的数据库有哪些
- c语言函数头文件 c语言函数头文件大全表格