malloc、calloc、realloc和alloca各种的区别_styeven malloc calloc

需要先包含头文件#include"malloc.h"malloc是标准的在堆中开辟新的空间比如char *pt=(char *)malloc(10*sizeof(char));需要free(p)才会释放空间
calloc也是开辟空间,但是使用方式不一样比如char *pt==(char *)calloc(100,sizeof(char));然后用calloc开辟的空间其内容会自动初始化为空,等于把该栈中使用的空间清零。也就是赋值''。原本未使用的空间内容都是'?'。也需要用free来对该空间进行释放
realloc对指针空间做重新定义,新的空间必须大于原来的空间。比如char *pt=(char*)malloc(10*sizeof(char));realloc(pt, 1000*sizeof(char));如果小于原来的空间会造成一些异常。(编译还是会通过)
alloca是最特殊的开辟栈空间方法,优点是当离开调用这个函数的时候,栈所分配的空间会自动释放(也就是free)。比如在一个函数中定义void fun(){char *ptt=(char *)alloca(100*sizeof(char));}当跳出这个函数的时候,系统会自动free ptt这个空间。但是他不是一个可移植的方法,如果处理器上不支持堆栈操作这个方法就不可用。(目前大部分处理器上都可以用。)但是如果需要这个ptt在其他地方(这个函数外)还是需要使用,那么这个方法就不可取了。
这个要说明一下free的作用,free并不是把栈的地址的内容给清零,而是告诉系统栈的某块内容可以被使用而已。如果够不告诉系统,则表明该区域一直在使用(实际上已经不使用了)。那么系统在做下一次new或者malloc的操作的时候就会开辟另一个空间。但是栈空间是有限的,如果一直没有free那么这个栈就会溢出。
内存泄露的定义是:做malloc类似的开辟空间的操作之后,当不使用的时候不做释放结果导致一直占据该内存单。(用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。)
malloc、calloc、realloc和alloca各种的区别_styeven malloc calloc



  

爱华网本文地址 » http://www.aihuau.com/a/25101013/157799.html

更多阅读

扫盲|终于知道轩尼诗VS、VSOP和XO之间的区别了…… 轩尼诗vsop xo

不管你是走入烟酒行,或是夜场,或是大型商超,亦或是各大免税店,酒架上轩尼诗(Hennessy)的logo总是特别显眼。作为普通消费者,不少人对轩尼诗VS、VSOP和XO等系列是傻傻分不清楚。只道都是酒,为什么有这些区分?既是同一品牌,为什么价格相差悬殊?看

特许经营合同、买卖合同和经销合同的区别 特许经营合同

特许经营作为一种新兴的商业模式,与一般的买卖合同、经销合同存在显著的区别,其中最重要的一点是,在特许经营中,产品的供应和销售渠道受到了合同的严格限制,且这种限制通常具有独占性,即经销商不得销售其他产品,在合同约定的区域内,特许人与

小米手机RAM、ROM和储存卡的那些事 rom和ram的作用和区别

很多用户对于手机的RAM、rom和储存卡这几个概念混淆不清。例如有的人会说他的手机“内存”是16G,有的用户则抱怨为什么16GROM的机器可用的只剩下10G甚至更少,例如米2,还有的则苦恼为什么储存卡还有很多空间,安装大型游戏的时候却弹出空

转 烧烤、腌制和隔夜食物的化学与健康问题 烧烤羊肉腌制方法

烧烤、腌制和隔夜食物的化学与健康问题李瑞金,董川(山西大学环境科学与工程研究中心,太原, 030006)摘要:本文从化学角度分析烧烤过程中产生丙烯酰胺和杂环胺、腌制食品中形成亚硝胺、隔夜食物中形成亚硝酸盐的机理,从化学与毒理学角度探

声明:《malloc、calloc、realloc和alloca各种的区别_styeven malloc calloc》为网友甘蔗味分享!如侵犯到您的合法权益请联系我们删除