当前位置:首页 > 内存 > 正文

动态内存分配得到的存储区(怎样学会c动态内存分配)

  • 内存
  • 2024-06-08 11:24:39
  • 9044

一、用calloc函数创建具有10个整型元素的动态存储空间的正确调用是?要根据程序的需要动态分配存储空间,必须使用以下函数
函数
malloc函数的原型为:
void*malloc(uignedintsize)
其作用是动态分配一块长度为size的连续空间内存的存储区域。它的参数是一个无符号整数,它的返回值是一个指向所分配的持久存储区域的起始地址的指针。另外需要注意的是,当函数分配存储空间失败(比如内存不足)时,会返回NULL指针。因此,在调用该函数时,必须检查返回值是否为空,并执行相应的操作。
以下示例是动态分配的程序:
#include
#include
main()
{
intcount,*array;/*count是一个计数器,array是一个整型指针,也可以理解为指向整型数组的首地址*/
if((array(int*)malloc(10*sizeof(int))))==NULL)
{
printf("无法成功分配存储空间。");
exit(1);
for(count=0;count<10;count++)/*给数组赋值*/
array[count]=count;
for(count=0;count<10;count++)/*打印数组的元素*/
printf("%2d",array[count]);
上例中动态分配了10个有效存储区域,然后分配并打印出来。示例中,语句if((array(int*)malloc(10*sizeof(int))==NULL)可以分为以下步骤:
1)分配10个连续的整数存储space,并返回一个指向其起始地址的整数指针
2)将整数指针的地址设置为数组
3)检查返回值是否为空
2.自由函数
由于内存空间总是有限的,不能无限制地分配,程序要尽量节省资源,所以当分配的内存区域没有被使用时,有必要释放它,以便变量或程序可以用于其他用途。这时候我们就要用到free函数了。
该函数的原型为:
voidfree(void*p)
该函数是释放指针p指向的内存区域。
p参数应该是之前调用malloc函数或calloc函数(另一个动态分配存储空间的函数)时返回的指针。将其他值传递给free函数可能会导致崩溃或其他严重后果。
注意:这里重要的是指针值,而不是用于请求动态内存的指针本身。例子:
int*p1,*p2;
p1=malloc(10*sizeof(int));
p2=p1;
……
free(p2)/*或free(p2)*/
malloc的返回值赋给p1,p1的值赋给p2,所以此时p1和p2都可以使用作为自由函数的参数。
malloc函数分配存储区域。
free函数释放不再使用的内存区域。
所以这两个函数可以实现内存区域的动态分配和简单管理。