作业题目,有点不理解。。。。
编写一个函数alloc(n) ,用来在内存区开辟一个连续的空间(n个字节)。此函数的返回值是一个指针, 只想新开辟的连续空间的起始地址。 再写一个函数free(p),将起始地址p开始的各单元释放(不能再被程序使用 ,除非再度开辟)。提示:现在内存区定出一片相当大的连续空间(如1000字节)。然后开辟与释放都在此空间进行。假设指针变量p原已指向未用空间的开头,调用alloc(n)后,开辟了n个字节可供程序适使用。现在需要使 p的值变为p+n,表示空白未用区从p+n地址开始,同时要将开辟区的起始地址(p)作为函数值返回,以表示可以利用从此点开始的单元。如果要开辟的区太大(n大),超过了预想的(1000)字符,则alloc(n)函数返回指针NULL,表示开辟失败。
以下是我写的东西 感觉并没有理解题目的意思,求解释。。。
#include <stdio.h>
#include <math.h>
#include <string.h>
#define NULL 0
void main()
{
char *alloc(char a[],int n);
void free(char *p,int n);
char a[1000],*p;
int n;
scanf("%d",&n);
if((p=alloc(a,n))!=NULL)
{
free(p,n);
}
else
printf("开辟失败");
}
char *alloc(char a[],int n)
{
int i;
char *x;
x=a;
fflush(stdin);
if(n>1000||n<1)
{
return(NULL);
}
else
{
for(i=0;i<n;i++)
{
scanf("%c",&a[i]);
}
return(x);
}
}
void free(char *p,int n)
{
int i;
for(i=0;i<n;i++,p++)
{
p=NULL;
}
}