malloc()函数,接受一个参数:所需内存字节数。该函数的功能是在程序运行时分配更多的内存。然后malloc()找到可用内存中一个大小合适的块。内存是匿名的;也就是说malloc()分配了内存,但没有为它指定名字。
然而,它却可以可以返回那块内存第一个字节的地址。因此,可以把那个地址赋值给一个指针,并使用该指针来访问那块内存。
函数malloc() 可用来返回数组指针、结构指针等等,因此一般需要把返回的类型指派为适当的类型。如果malloc()找不到所需的空间,它将返回空指针。
例如:
double *p;
p=(double*)malloc(30*sizeof(double));
这段代码请求30个double类型值得空间,并且把p指向所需的空间所在位置。
一般地,对应每个malloc()调用,应该调用一次free()。函数free()的参数是先前malloc()返回的地址,它释放先前分配的内存。这样,所分内存的持续时间从调用malloc()分配内存开始,到调用free()函数释放内存以供再次使用为止。free()的参数应是一指针,指向有malloc()分配的内存块;不能使用free() 来释放通过其他方式分配的内存。
malloc()和free()的原型在头文件stdlib.h中。
例如:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int max;
int number;
int i=0;
puts("What is the maximum number of type double entries?");
scanf("%d",&max);
p=(double*)malloc(max*sizeof(double));
if(p==NULL)
{
puts("Memory allocation failed.Goodbye!");
exit(EXIT_FAILURE);
}
puts("Enter the values (q to quit):");
while(i<max&&scanf("%lf",&p[i])==1)
++i;
printf("Here are your %d entried:\n",number=i);
for(i=0;i<number;i++)
{
printf("%7.2f",p[i]);
if(i%7==6)
putchar('\n');
}
if(i%7!=0)
putchar('\n');
puts("Done.");
free(p);
return 0;
}
运行示例,输入7个数,但程序只处理5个,因为我们将数字大小限定为5.
What is the maximum number of type double entries?
5
Enter the values (q to quit):
45 12 78 20 45 23 45
Here are your 5 entried:
45.00 12.00 78.00 20.00 45.00
Done.