【C语言】动态内存管理(下)

     

本篇博客将讲解以下知识:

1、calloc和realloc

2、常见的动态内存错误

1、calloc和realloc

(1)calloc

C语言中还提供了一个函数叫calloc,calloc也用来动态内存分配

calloc函数原型:

void*     calloc(size_t  num,   size_t    size)

1))函数的返回值是申请的空间的起始地址

2))函数的功能是把num个大小为size的元素开辟一块空间并且把空间的每个字节初识化为0;

3))与函数malloc的区别只在于calloc会在返回地址之前把申请的空间的每个字节初始化为全0(零)

示例:

所以,如果我们对申请的内存空间的内容要求初识化,那么可以很方便的使用calloc函数来完成任务。

(2)realloc函数

注意:使用realloc函数时,要包含头文件:stdlib.h

1))realloc函数的出现让动态内存管理更加灵活

2))有时我们会发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的使用内存,我们一定会对内存的大小做灵活的调整。

realloc函数的原型:

void*   realloc(void *   ptr,  size_t  size)

1))ptr是要调整的内存地址

2))size为调整之后新大小,单位是字节。

3))返回值为调整之后的内存起始地址。

4))这个函数调整原内存空间的基础上,还会将原来内存中的数据移动到新的空间。

5))realloc在调整空间时存在两种情况

情况一:原有空间之后有足够大的空间

情况二:原有空间之后没有足够大的空间。

情况三:返回的是NULL

情况二:原有空间之后没有足够大的空间。

1))在堆区的内存中找一个新的空间并且符合新的大小要求。

2))会把原来空间的数据拷贝一份到新的空间。

3))释放旧的空间

4))返回新的内存空间的起始地址。

情况一:原有空间之后有足够大的空间

要扩展内存就直接在原有内存之后直接追加空间,原来空间的数据不发生变化,返回的是旧的空间的地址。

由于上述两种情况,realloc函数的使用就要注意一下。

示例:

realloc函数的特殊用途:

realloc(NULL,20);//完全等价于malloc(20);

2、常见的动态内存错误

(1)对NULL指针的解引用操作

代码:

INT_MAX是一个非常大的数字:

该题存在的问题就是:不能确定p的值是否是NULL,如果是NULL的话,则不能对指针变量解引用赋值。

解决方法:

(2)动态内存忘记释放(内存泄漏)

内存泄漏:申请了动态内存,但不释放该动态内存

示例:

忘记释放不再使用的动态开辟的内存会造成内存泄漏。

切记:动态开辟的空间一定要释放,并且正确释放,即malloc和free成对出现。

其实,malloc/calloc/realloc申请的动态内存,如果不再使用,就可以使用free释放。

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

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

相关文章

Flask如何实现前后端分离项目

在现代Web开发中,前后端分离是一种常见的架构模式,其中前端和后端分别独立开发和部署,通过API进行通信。Flask作为后端框架,可以很容易地与前端框架(如React、Vue.js或Angular)配合使用来实现前后端分离。以…

配置 @ 路径别名,优化小程序访问路径

配置 路径别名,优化小程序访问路径 在开发大型小程序时,我们通常会采用分包策略来优化加载速度和用户体验。然而,这种分包方式往往会导致访问小程序根目录下文件的路径变得冗长而复杂。为了简化这些路径,我们可以借鉴 Vue 中的做…

标准库、STL、编译参数、正则表达式

标准库 标准库减少了不同程序员对编程语言语法语义的疑惑。 不同语言的标准库 C语言有标准库libc, 最新的Windows系统已更新为ucrt, 可在PC/移动设备共享crt. 相比C语言,C除了有标准C运行时库,增加了STL. STL 写了太多的不同参数类型的加法函数&#xff…

Python 入门(二、什么是 Python 的虚拟环境)

Python 入门第二课 ,Python 的虚拟环境...... by 矜辰所致前言 本来以为环境搭建好了,就直接开始敲代码了,但是一直看到一个专业词汇:虚拟环境。 对于习惯了嵌入式 C 语言开发博主来说,一开始确实有点不明白&#xf…

centos celery 日志管理

celery经常会产生大量日志,长时间累计下来会对服务器造成一定的压力 1 配置 logrotate 进行日志拆分 logrotate 是 Linux 系统中常用的日志管理工具。我们将使用它来管理 Celery 的日志文件,确保日志文件不会无限增长,并定期拆分、归档和删…

Spring集成Redisson及存取几种基本类型数据

目录 一.什么是Redisson 二.为什么要使用Redisson 三.Spring集成Redisson 1.添加依赖 2.添加配置信息 3.添加redisson配置类 四.Redisson存取各种类型数据 1.字符串(String类型) 存储 获取 2.object对象类型 1.实体类信息 2.存储 3.获取 3.List集合类型 第一种…

在java 中如何实现执行linux命令,通过post接口代理出来?

接口方式输入命令得返回结果 public AjaxResult doPost(HttpServletRequest request, HttpServletResponse response, String command) throws ServletException, IOException {// 设置响应内容类型 text/plain // response.setContentType("application/json"…

【Python】Qwen-VL-7B box

VLLM-Qwen2-VL-7B-Instruct import cv2# 读取图像 image_path haibaoA.png # 替换为图像的路径 image cv2.imread(image_path)# 定义框的坐标 (x1, y1) 是左上角,(x2, y2) 是右下角 x1, y1 200, 550 # 左上角坐标 x2, y2 799, 750 # 右下角坐标 h, w image.…

Unite Shanghai 2024 团结引擎专场 | 团结引擎 OpenHarmony 工程剖析

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中,Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析,详细讲解 XComponent 如何与引擎结合,UI 线程和引擎线程的关联以及 ts/ets 的代…

ijkMediaPlayer+ TextureView 等比全屏播放视频(避免拉伸)

TextureView默认以fitxy的方式加载surface数据,如果需要等比全屏播放视频,避免拉伸,可以采用Matrix对TextureView进行变换 废话不多说,直接上代码 public class BaseIjkPlayer implements TextureView.SurfaceTextureListener{/…

smbms项目(1)

目录 一、项目搭建准备工作 二、登录功能实现 三、注销功能实现 四、登录拦截实现 一、项目搭建准备工作 1、搭建一个maven web项目 2、配置Tomcat 3、测试项目是否能够跑起来 4、导入项目中会遇到的jar包(servlet、jsp、mysql驱动、jstl、standard&#xf…

python+大数据+基于Spark的共享单车数据存储系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

Golang | Leetcode Golang题解之第464题我能赢吗

题目&#xff1a; 题解&#xff1a; func canIWin(maxChoosableInteger, desiredTotal int) bool {if (1maxChoosableInteger)*maxChoosableInteger/2 < desiredTotal {return false}dp : make([]int8, 1<<maxChoosableInteger)for i : range dp {dp[i] -1}var dfs …

浙江省发规院产业发展研究所调研组莅临迪捷软件考察调研

2024年10月10日下午&#xff0c;浙江省发展与规划院产业发展研究所调研组一行莅临迪捷软件考察调研&#xff0c;绍兴市府办、区发改、区经信、迪荡街道等相关领导陪同。 调研组一行参观了迪捷软件的展厅与办公区&#xff0c;深入了解了迪捷软件的公司发展历程、运营状况、产品…

Ubuntu 上使用 Nginx 实现反向代理并启用 HTTPS(详细教程)

拒绝使用宝塔&#xff0c;虽然宝塔很好用方便&#xff0c;但是他非常占用资源&#xff0c;所以我正在尝试转换我使用服务器的方式&#xff0c;通过命令来才做这些&#xff0c;下面是我的详细步骤。 在这篇教程中&#xff0c;我们将详细介绍如何在 Ubuntu 系统上使用 Nginx 搭建…

【论文#码率控制】ADAPTIVE RATE CONTROL FOR H.264

目录 摘要1.前言2.基本知识2.1 蛋鸡悖论2.2 基本单元的定义2.3 线性MAD预测模型 3.GOP级码率控制3.1 总比特数3.2 初始化量化参数 4.帧级码率控制4.1 非存储图像的量化参数4.2 存储图像的目标比特 5.基本单元级码率控制6.实验结果7.结论 《ADAPTIVE RATE CONTROL FOR H.264》 A…

go clean command

文章目录 1.简介2.格式3.选项4.示例5.应用场景6.小结参考文献 1.简介 在 Go 语言的开发过程中&#xff0c;管理依赖和构建缓存是非常重要的。随着项目的迭代&#xff0c;旧的缓存和不再需要的依赖可能会影响构建的效率和准确性。 Go 提供了一个非常实用的命令 go clean&#…

第J5周:DenseNet+SE-Net实战(TensorFlow版)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** &#x1f4cc; 本周任务&#xff1a; ●1. 在DenseNet系列算法中插入SE-Net通道注意力机制&#xff0c;并完成猴痘病识别&#xff0…

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…

linux 设置tomcat开机启动

在Linux系统中&#xff0c;要配置Tomcat开机自启动&#xff0c;可以创建一个名为 tomcat.service 的 systemd 服务文件&#xff0c;并将其放置在 /etc/systemd/system/ 目录下。以下是一个基本的服务文件示例&#xff0c;假设Tomcat安装在 /usr/local/tomcat 路径下&#xff1a…