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

c语言动态内存分配malloc

  • 内存
  • 2024-05-01 02:13:14
  • 9949

一、C语言动态分配内存要根据程序的需要动态分配存储空间,必须使用以下函数
函数
malloc函数的原型为:
void*malloc(uignedintsize)
其作用是动态分配一块长度为size的连续空间内存的存储区域。它的参数是一个无符号整数,返回值是指向分配的连续存储区域起始地址的指针。另外必须注意的是,当函数分配存储空间失败(比如内存不足)时,会返回NULL指针。因此,在调用该函数时,应检查返回值是否为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++)/*打印arrayElement*/
printf("%2d",array[count]);
}
上例中动态分配了10个整数存储区域,然后赋值并打印。示例中,if((array(int*)malloc(10*sizeof(int)))==NULL)语句可以分为以下步骤:
1)分配10个连续的整数存储空间,并返回指向其起始地址的整型指针
2)将整型指针地址赋给数组
3)检查返回值是否为NULL
函数
由于内存区域总是有限的,不能无限制地分配,程序要尽量节省资源,所以当分配的内存区域不使用时,需要释放以便其他变量或程序可以使用它。这时候我们就要用到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函数释放不再使用的内存区域。
所以这两个函数可以实现内存区域的动态分配和简单管理。


二、c语言中malloc函数的用法C语言中malloc函数的使用是动态内存分配函数。malloc函数是C语言中的动态内存分配函数。它可以在程序运行时动态分配内存空间,使程序更加灵活和可扩展。使用malloc函数在程序运行时动态分配内存空间。例如,下面的代码片段可能会申请一个大小为10个整型变量(即40字节)的连续内存位置,并将其首地址赋给指针变量p。不再需要请求的动态内存位置,应该将其释放以供其他程序使用。您可以使用释放功能来释放内存空间。由于动态内存分配是在运行时执行的,因此可能会发生内存分配错误。为了避免程序使用未分配的内存空间时出现错误,应在使用malloc函数后检查内存空间是否分配成功。


三、c语言动态数组如何扩充空间

C语言中的动态数组扩展空间主要是利用动态存储分配库函数来实现的。常用的函数有malloc函数和calloc函数。

malloc()是C语言中动态存储管理的标准库函数集之一,它的作用是在内存的动态存储区域中分配长度大小的常量空间。参数是无符号整数,返回值是指向分配的持久存储区域起始地址的指针。

例如:

char*x;

x=(char*)malloc(10);//x指向10个字符单元存储。

扩展信息:

函数定义

函数原型为void*malloc(unsignedintsize);它在内存的动态存储区域分配恒定长度的空间。该函数的返回值是分配区域的起始地址,或者换句话说,该函数是一个指针函数,返回的指针指向分配区域的开头。

如果分配成功,则返回指向已分配内存的指针(未确定该存储区域的初始值),否则返回空指针NULL。当内存不再使用时,应该使用free()函数释放内存块。函数返回的指针必须正确对齐,以便它可以与任何数据对象一起使用。

参考来源:-malloc函数