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

c语言中动态分配内存

  • 内存
  • 2024-06-12 01:51:42
  • 1948

一、C语言,malloc和sizefo这两个函数具体有什么用?能详细解释清楚下嘛?最好举例说明下.structnode{
intnum;
charname[10];
intage;
}*list;
list=(structnode*)malloc(sizeof(structnode)*10);//动态分配10个节点的空间分配成功后;会有一个数组:structnodelist[10];
malloc是一个分配内存空间的函数,返回一个地址值,
就是分配的空间有多大。由malloc()函数的参数指定
sizeof(structnode)是一个节点占用的空间大小(用siezof命令很容易得到,但程序员可能不知道)
*10表示申请节点10。
二、C语言动态分配内存要根据程序的需要动态分配存储空间,应使用以下函数
1malloc函数
malloc函数的原型为:

void*malloc(uignedintsize)
其作用是在动态内存存储区域分配一个恒定长度大小的空间。它的参数是一个无符号整数,返回值是指向指定持久存储区域起始地址的指针。另外需要注意的是,当函数分配存储失败(比如内存不足)时,会返回NULL指针。因此,调用该函数时,必须检查返回值是否为NULL,并执行相应的操作。
下面的例子是一个动态分配的程序:
#include
#include
main()
{
intcount,*array;/*count是一个计数器,array是一个整数指针,也可以理解为指向整数数组的首地址*/
if((array(int*)malloc(10*sizeof(int)))==NULL)
{
printf("无法成功分配存储。");
output(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个整数节省空间并返回一个指向其起始地址的整数指针
2)将整数指针的地址设置为数组
3)检查返回值是否为NULL
2自由函数
由于内存区域总是有限的,不能无限制地分配,程序必须尽量节省资源,所以当指定的内存区域不可用时在。使用时,需要释放它才能让其他变量或程序使用它。这时候我们就要使用免费的功能了。
该函数的原型为:
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函数释放不再使用的内存区域。
所以这两个函数可以实现动态分配和简单的内存区域管理。