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

需要先包含头文件

#include"malloc.h"
malloc是标准的在中开辟新的空间
比如
char *pt=(char *)malloc(10*sizeof(char));
需要free(p)才会释放空间
calloc也是开辟空间,但是使用方式不一样
比如
char *pt==(char *)calloc(100, sizeof(char));
然后用calloc开辟的空间其内容会自动初始化为空,等于把该中使用的空间清零。也就是赋值'\0'。
原本未使用的空间内容都是'?'。
也需要用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类似的开辟空间的操作之后,当不使用的时候不做释放结果导致一直占据该内存单。(用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。)

转载于:https://www.cnblogs.com/Ph-one/p/6812276.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何对第一个Vue.js组件进行单元测试

by Sarah Dayan通过莎拉达扬 In Build Your First Vue.js Component we made a star rating component. We’ve covered many fundamental concepts to help you create more complex Vue.js components.在“ 构建您的第一个Vue.js组件”中,我们制作了星级评分组件…

Asp.NetCoreWebApi - RESTful Api

REST 常用http动词 WebApi 在 Asp.NetCore 中的实现3.1. 创建WebApi项目.3.2. 集成Entity Framework Core操作Mysql 3.2.1. 安装相关的包(为Xxxx.Infrastructure项目安装)3.2.2. 建立Entity和Context3.2.3. ConfigureService中注入EF服务3.2.4. 迁移数据库3.2.5. 数据库迁移结果…

android动画影子效果,Android TV常用动画的效果,View选中变大且有阴影(手机也能用)...

因为电视屏幕比较大,而我们看电视时距离电视有一定距离,这样就需要动画效果比较明显,这个动画就是应用最广泛的,因为很酷,呵呵,你懂得,看了就知道。效果如下图:public class MainAct…

leetcode226. 翻转二叉树(dfs)

翻转一棵二叉树。示例:输入:4/ \2 7/ \ / \ 1 3 6 9 输出:4/ \7 2/ \ / \ 9 6 3 1代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode righ…

Java BigDecimal Rounding Mode

UP        往绝对值大了取 DOWN      往绝对值小了取 CEILING     往值大了取 FLOOR      往值小了取 HALF_UP     不管正负,四舍五入 HALF_DOWN  不管正负,五舍六入 HALF_EVEN    整数部分为奇数:四舍五入…

如何成为一名有效的软件工程师

by Luis Santiago路易斯圣地亚哥(Luis Santiago) 如何成为一名有效的软件工程师 (How to become an effective software engineer) When I first started my journey as a software engineer I quickly noticed the great amount of cognitive load involved when working on …

linux 高可用----keepalived+lvs

什么是高可用? HA(high availability)即高可用性;就是在高可用集群中发生单点故障时,能够自动转移资源并切换服务,以保证服务一直在线的机制。 LVS LVS:(linux virtual server&#…

用户配置相关文件

用户配置相关文件小总结 /etc/passwd 记录用户相关的信息 /etc/shadow 密码影子文件 /etc/group 记录用户组相关的信息 /etc/gshadow 密码影子文件(组密码) /etc/passwd 文件中各段的内容 第1段:用户名 第…

华为5c android n风格,华为荣耀畅玩5C的屏幕怎么样

华为荣耀畅玩5C的屏幕怎么样屏幕方面,华为荣耀畅玩5C采用了5.2英寸1080P级别GFF贴合屏幕,塑料边框采用了弧面状的设计,握感比较舒适。华为荣耀畅玩5C采用了双主天线的设计,分别在上下的塑料区域。此外,边框以及后盖的上…

spring解析配置文件(三)

一、从XmlBeanDefinitionReader的registerBeanDefinitions(doc,resource)开始 1 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) 2 throws BeanDefinitionStoreException { 3 try { 4 …

leetcode968. 监控二叉树(dfs)

给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 输入:[0,0,null,0,0] 输出:1 解释:如图所示,一台摄像头足…

linux系统部署war包,查看tomcat日志

1.部署war包app/tomcat/bin在tomcat/bin 目录下启动 .startup.sh,在启动过程中tomcat会对war包进行解压,形成相应的项目目录 执行命令:./startup.sh 2.实时查看tomcat的日志。首先需要到tomcat的日志目录下。我的目录供你参考app/tomcat/logs…

代码编写工具_这些工具将帮助您编写简洁的代码

代码编写工具看一下Prettier,ESLint,Husky,Lint-Staged和EditorConfig (A look at Prettier, ESLint, Husky, Lint-Staged and EditorConfig) Learning to write good code, but you don’t know where to start… Going through style-guide…

使用kibana和elasticsearch日志实时绘制图表

前言: 此文接的是上篇,上次的内容是,用python操作elasticsearch存储,实现数据的插入和查询。 估计有些人一看我的标题,以为肯定是 logstash kibana elasticsearch的组合。这三个家伙也确实总是勾搭在一块。 其实logst…

android中设置菜单栏,android – 菜单项没有显示在操作栏

我做了一个全新的项目。我已经添加了项目到菜单布局文件。这些项目不会显示在操作栏的右侧。我记得一个有三个点的图标显示出来,打开菜单。这里是我的活动public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState)…

leetcode617. 合并二叉树(dfs)

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接…

conda使用报错:ImportError:DLL load failed

conda安装python环境经常报: ImportError:DLL load failed 将环境变量加入path可以解决: D:\program\anaconda D:\program\anaconda\Scripts D:\program\anaconda\Library\bin 转载于:https://www.cnblogs.com/timlong/p/11122805.html

《程序员修炼之道》笔记(八)

第八章 注重实效的项目 随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的、项目级的问题。我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域。 1. 注重实效的团队 书中前面的内容都是帮助个体成为更好的程序员…

android 网络调试 源代码,Android源代码调试环境搭建

我们在调试Android应用程序的时候,有时候遇到一些莫名其妙的问题,因此我们需要查看Android内部是如何调用的。我们都知道Android是一个伟大的开源项目,因此debug的时候肯定是支持源代码级别调试的。采用源代码调试,一方面有利于发…

如何使用HTTP压缩优化服务器

鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的。其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能。数据压缩本身并不新鲜。但是&…