博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C语言】分配内存:malloc() 和 free()
阅读量:6233 次
发布时间:2019-06-21

本文共 1672 字,大约阅读时间需要 5 分钟。

malloc():用于分配内存,但没有给内存指定名字,它返回那块内存第一个直接的地址;如果malloc()找不到所需的空间,它就会返回一个空指针;

free():与malloc() 搭配使用;它的参数是先前malloc() 返回的地址,是一个指针;它释放先前分配的内存;不能用free()来释放通过其他方式分配的内存;

exit():该函数用于在分配失败时结束程序;值EXIT_FAILURE指示程序异常终止;值EXIT_SUCCESS(或者,等同于0)指示程序正常终止;

这样,所分配的内存的持续时间从malloc()分配内存开始,到free()释放内存为止;并且内存块可在一个函数中创建,在另一个函数中释放;

在头文件 stdlib.h 中有malloc() 和 free() 和exit() 的原型;

free() 的重要性:因为被分配的内存只会增加,除非你记得使用free();

malloc(),free()的使用方式:

1 double * ptd;2 ptd = (double *) malloc(30 * sizeof(double));3 //另一种方式,实现相当于变长数组,但更灵活4 int n;5 ptd = (double *) malloc(n * sizeof(double));6 //对ptd进行操作7 free(ptd);

 

来看一个实例:

1 #include
2 #include
//为malloc(),free(),exit()函数提供原型 3 int main(void){ 4 double * ptd; 5 int max; 6 int number; 7 int i=0; 8 puts("what's the maximum number of type double entires?"); 9 scanf("%d",&max);10 ptd = (double *)malloc(max * sizeof(double));11 if(ptd == NULL){12 puts("Memory allocation failed. Goodbye.");13 exit(EXIT_FAILURE);14 }15 //ptd现在指向有max个元素的数组16 puts("Enter the value:");17 while(i < max && scanf("%lf",&ptd[i]) == 1){18 ++i;19 }20 printf("Here are your %d entires: \n", number = i);21 for (i=0; i

 

运行结果:

函数calloc(): 内存分配到另一种方式:它的特性是使块中全部的位置都置为0

long * newmem;

newmem = (long *) calloc(100, sizeof(long));

第一个参数是所需内存单元的数量,第二个参数是每个单元以字节计的大小;也是使用free()来释放它所分配的内存

 动态分配内存和变长数组:

1 int n=5;2 int m=6;3 int ar1[n][m];  //n*m的变长数组4 int (* p1)[6];  //在c99之前可以使用5 int (* p2)[m];  //要求变长数组支持6 p1 = (int (*)[6]) malloc(n*6*sizeof(int));  //n*6数组7 p2 = (int(*)[m]) malloc(n*m*sizeof(int));   //n*m数组

 

转载于:https://www.cnblogs.com/TsnTse/p/9074181.html

你可能感兴趣的文章
Linux编译步骤概述
查看>>
Ubuntu环境使用apt命令下载管理包的优势
查看>>
如何利用MongoDB打造TOP榜小程序
查看>>
Eureka自我保护模式——难点重点
查看>>
Android中Handler的使用[一]
查看>>
用于不同服务器数据库之间的数据操作
查看>>
产品部和业务部门的利益之争
查看>>
手机网页 右边的空白区
查看>>
Fedora 9中“网卡无法自动激活”的解决方法
查看>>
translate under shell with alias
查看>>
Utf-8和Gb2312乱码问题的终结
查看>>
linux命令详解:jobs命令
查看>>
PHP array_merge 隐藏坑。。
查看>>
创业实战go语言制作网站(转)
查看>>
Linux终端:用cat命令查看不可见字符
查看>>
jsp 格式化变量
查看>>
无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法...
查看>>
java环境变量配置
查看>>
Jquery的toggle()方法
查看>>
ylbtech-LanguageSamples-Versioning(版本控制)
查看>>