正文
c语言开辟空间函数 c语言申请空间函数malloc
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
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语言指针编写一个函数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 - _giPos n)
return NULL;
char * p = _gpcMemBlkBgn + _giPos;
_giPos += n;
return (void *)p;
}
void free(void * p)
{
}
注:alloc, free不像你描述的那么简单,其实每次分配还要用一个连表记录下来其位置和大小,而每次分配不一定要从末尾开始分,而是在连表中找一块空白的,分一砣,剩下的又是一块插到连表中,而释放的时候,如果前后更好挨着,则需要合并
c语言中怎么用malloc()函数开辟用于存放char型的指针的空间?
char* pc=(char*)malloc(10);
在内存中申请10个char大小的存储空间,并将存储空间的首地址放于变量pc中。
记得不要忘记类型转换。
C语言 指针编写一个函数alloc(n) 在内存区开辟和释放一个连续空间
#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)+nbase+LENn0)
{
*(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;
}
C语言malloc函数和free函数?
在内存上有三个区域可以用来保存数据c语言开辟空间函数,一个是栈区、一个是堆区、一个是静态区,一般常用的定义变量是在栈区开辟,特点是系统开辟和释放c语言开辟空间函数;堆区的空间是由使用者来开辟空间,所以需要借助malloc开辟空间,free释放空间。p=(char *)malloc(sizeof(char)*20);malloc函数申请空间,sizeof(char) * 20表示malloc开辟空间字节数为20字节,malloc前的char * 表示开辟空间进行强制类型转换为需要开辟的空间的数据类型。free(p)函数表示释放由使用者开辟的空间,因为空间开辟是手动调用函数开辟的空间,所以释放空间也需要调用函数开辟。
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语言开辟空间函数和c语言申请空间函数malloc的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。