2、free函数:由于内存区域总是有限的,不能不限制地分配下去 , 而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用 。这时我们就要用到free函数 。
3、calloc函数:其作用是在内存的动态存储区中分配n个长度为 size 的连续空间 。函数返回一个指向分配区域的起始位置的指针;如果分配不成功 , 则返回NULL 。
扩展资料:
函数运算符:
new
运算符new用于向系统申请动态存储空间,并把首地址作为运算结果 , 它的使用形式为:
指针变量=new 数据类型;
例如:
int *p=new int
该语句的作用是会用new从内存中申请了一个int型变量(4个字节),并将该变量的首地址赋给指针变量p 。
new所建立的变量的初始值是任意的,也可在用new分配内存的同时进行初始化 。使用形式为:
指针变量=new 数据类型(初始值) 。
delete
堆内存可按照要求进行分配,程序对内存的需求量随时会发生变化,有时程序在运行种可能会不再需要由new分配的内存空间 , 而且程序还未运行结束,这时就需要把先前占用的内存空间释放给堆内存,以后重新分配 , 供程序的其他部分使用 。运算符delete用于释放new分配的内存空间,删除建立的对象,它的使用形式为:
delete 指针变量;
其中的指针变量中保存着new分配的内存的首地址 。
参考资料:百度百科--动态内存分配
C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)先举个例子:某用户需要一个将任意多个整数按大小排序的程序 。(在计算机文件夹中,当文件很多时经常用到排序)
1 。若不用动态分配内存,那就定义一个超大的数组吧!问题是,如果用户不需要那么大 , 不就浪费了?如果定义的数组还不够大,不就不能满足需求了?
2 。如果用动态分配,就解决上述问题了 。当你需要多大内存时,就给你多大——如果有的话——这就是动态分配的意义 。
现在看上述问题的代码,我调试过的:
----------------------------------------------------------------------
#include stdio.h
#include stdlib.h/* calloc、exit需要声明头文件 */
void main()
{
int n,*p,i,j,m;
printf("本程序可对任意个整数排序;\n");
printf("请输入整数的总个数: ");
scanf("%d",n);
p=(int *)calloc(n,sizeof(int));/* calloc函数的使用 */
if(p==0){
printf("分配失败!\n");
【c语言中动态分配的函数库 c语言动态分配语句】exit(1);/* 当分配失败时,exit可以终止程序 */
}
printf("请输入这些整数:\n");
for(i=0;in;i++)
scanf("%d",p+i);/* 利用指针移位的方法赋值 */
for(i=1;in;i++)/* 冒泡排序法 */
{
for(j=0;jn-i;j++)
if(*(p+j)*(p+j+1))
{
m=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=m;
}
}
printf("将这些整数从小到大排列输出为:");
for(i=0;in;i++)
{
if(i%5==0) printf("\n");/* 每隔5个数换行 */
printf("%11d;",*(p+i));
/* 为了整齐 , 每个数占11个字符 , 当数字很多时这很重要 */
}
printf("\n");
free(p);/* 释放空间 */
}
----------------------------------------------------------------------
调用calloc函数时,calloc(n,sizeof(int))表示请求n个连续的、每个长度为整型的空间 , 若成功返回这些空间的首地址 。(int *)表示将这个地址放在指针中 。到此为止,就可以用指针来对分配到的空间操作了 。注意 , 最后一定要用free函数释放申请到的空间,否则这部分空间会一直占着 。
推荐阅读
- 微信视频号如何转播直播,视频号怎么转直播
- net版本sqlserver2012,net版本低怎么办
- 火山直播第7名主播,火山直播十大主播
- go语言市场 go语言市场需求
- chatgpt会进化吗,trapinch进化
- 四维空间变成虚拟时间了,四维空间里的时间
- vb.net连接腾讯云 腾讯云vpc连接方式
- sqlserver2012备份还原,sqlserver2014备份还原
- 解谜游戏氛围,解谜游戏里的小游戏