C语言-----动态内存管理(1)

1.引入

我们之前已经学习了几种开辟内存空间的方式:
(1)int a=10;开辟4个字节大小的空间

(2)int arr[10]={0}定义数组开辟了一串连续的空间

2.malloc和free

(1)malloc开辟内存空间可能会失败,因此需要检查是否为空指针

(2)malloc返回void*类型,指针p是int*类型,因此需要强制类型转换

(3)malloc申请到空间以后,直接返回这块空间的起始地址,不会初始化空间的内容

(4)malloc申请的空间,只有程序退出的时候才会还给操作系统,当程序不退出的时候,动态申请的内存,需要使用free释放空间

(5)free释放空间之后,需要及时的置为空指针

(6)free,malloc的声明都放在stdlib.h的头文件里面的;

3.calloc

(1)这个函数和malloc用法基本相同,不同的地方就是参数不同,这个有2个参数,第一个是个数(徐要开辟空间的个数),第二个就是单个空间的大小

(2)这个函数不像malloc函数,返回空间起始地址,这个会初始化全部为0;

4.realloc

(1)realloc也有2个参数,它可以随时改变我们申请的内存空间的大小,因为有的时候我们申请的

内存空间可能会不够

(2)这里是原来申请40字节的空间,后来改成了80字节;

这里会有2种情况,

-----1.与之相邻的连续空间足够可以容纳80字节

-----2.与之相邻的连续空间不够,这个时候会重新开辟80字节空间,把原来的40字节空间里面的数

据复制过去,然后是释放掉原来的空间(这个释放不需要我们自己进行)

(3)如果是重新开辟80字节的空间,就有可能开辟失败,这个时候如果我们直接给p,就有可能

原来的空间不见了,新的空间也没有,造成内存的泄露

(4)我们先给ptr指针,如果这个不是NULL,我们再传给p,就可以避免上面的内存泄漏问题了

(5)如果realloc里面的第一个参数是空指针,他的功能就和malloc完全相同

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

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

相关文章

Linux - 权限概念

Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情超级用户的命令提示符是“#”,普通用户的命令提示符是“$” 命…

Java进阶(锁)——锁分类总结,Java中常用的锁的介绍

目录 引出锁分类总结1、乐观锁2、悲观锁3、自旋锁4、可重入锁5、读写锁6、公平锁7、非公平锁8、共享锁9、独占锁10、重量级锁11、轻量级锁12、偏向锁13、分段锁14、互斥锁15、同步锁16、死锁17、锁粗化18、锁消除 Java中常用的锁synchronizedLock和synchronized的区别Reentrant…

PHP项目中composer和Git的组合使用

highlight: 在国内由于众所周知的原因,composer的package可能无法访问,解决办法是使用中国的全镜像: composer config -g repositories.packagist composer http://packagist.phpcomposer.com 在需要使用composer package的地方创建composer…

如何对比 MySQL 主备数据的一致性?

随着业务范围的扩大,很多企业为了保障核心业务的高可用性,选择了 MySQL 主从架构,这一套方案通常具备主备数据同步、数据备份与恢复、读写分离、高可用切换等特性,是一种相当成熟可靠的数据库架构方案。然而这套方案在特定情况下可…

tomcat安装步骤流程

安装tomcat是基于安装java的基础上的 JAVA 举例说明: 关闭防火墙 下载java [rootlocalhost ~]#yum install java -y rootlocalhost ~]#yum install epel-release.noarch -y [rootlocalhost ~]#yum provides */javac [rootlocalhost data]#yum install java-1.8.0-o…

1028. 从先序遍历还原二叉树(三种方法:栈+递归+集合)

文章目录 1028. 从先序遍历还原二叉树(三种方法:栈递归集合)一、栈 while迭代1.思路2.代码 二、递归法1.思路2.代码 三、集合存储1.思路2.代码 1028. 从先序遍历还原二叉树(三种方法:栈递归集合) 一、栈 wh…

Python爬虫——Urllib库-3

目录 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 获取豆瓣电影前十页的数据 ajax的post请求 总结 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 首先可以在浏览器找到发送数据的接口 那么我们的url就可以在header中找到了 再加上UA这个header 进行请…

【Python笔记-设计模式】备忘录模式

一、说明 备忘录模式是一种行为设计模式,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 (一) 解决问题 主要解决在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要时恢复对象…

Java-nio

一、NIO三大组件 NIO的三大组件分别是Channel,Buffer与Selector Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通…

【OpenGL的着色器03】内置变量(gl_Position等)

目录 一、说明 二、着色器的变量 2.1 着色器变量 2.2 着色器内置变量 三、最常见内置变量使用范例 3.1 常见着色器变量 3.2 示例1: gl_PointSize 3.3 示例2:gl_Position 3.4 gl_FragColor 3.5 渲染点片元坐标gl_PointCoord 3.6 gl_PointCoo…

linux服务器调度数据库的存储过程

1、需要安装数据库的客户端 2、安装sqlplus 3、编写sh脚本 脚本内容如下: 4、设置调度任务

数据结构—>带你深入了解单链表(基础篇)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 前面我们学习了顺序表,今天我们来学习与顺序表类似的单链表 1.&#x1f3…