动态内存管理一一常见错误与习题练习

目录

前言

一、常见错误

1、对NULL指针的解引用操作

2、 对动态开辟空间的越界访问

3、对非动态开辟内存使用free释放

4、使用free释放一块动态开辟内存的一部分 

5、对同一块动态内存多次释放

6、动态开辟内存忘记释放(内存泄漏)

二、习题练习

题目1:

题目2:

题目3:

题目4:


前言

本章我们来学一些动态内存管理过程中我们常常会遇到的一些错误类型并分析几个动态内存方面的经典笔试题

一、常见错误

1、对NULL指针的解引用操作

开辟完动态内存空间之后要立即对指针进行判断是否为NULL,为NULL的话用perror打印错误信息并return 1

2、 对动态开辟空间的越界访问

注意开辟空间大小,防止越界访问

3、对非动态开辟内存使用free释放

4、使用free释放一块动态开辟内存的一部分 

5、对同一块动态内存多次释放

 

如果第一次释放之后及时将指针置为NULL,则第二次相当于释放空指针,代码则不会出现问题,free一个空指针系统不会做任何操作

6、动态开辟内存忘记释放(内存泄漏)

这是一个很严重的错误,内存空间作为一个资源应该合理利用,当我们不用开辟的内存空间时应该及时把它释放

二、习题练习

题目1:

代码中存在的问题:

没有free,因为是传值调用,所以str里的值并未被改变,还是NULL,往空指针里放字符串系统会报错

题目2:

 

代码中存在的问题:

因为“hello world”是存放在栈区空间里面,所以出了函数该空间会被系统回收,此时返回的指针p则变为一个野指针,值赋给str再打印,系统会报错

题目3:

代码中存在的问题:

没有free

该代码是用传址调用的方式把开辟好的动态空间的地址赋给str,我们还可以用return的方式来实现把创建好的动态空间地址从函数中传出来

题目4:

代码中存在的问题:

不一定能打印出来str里面的内容,因为free之后开辟的空间已经归还给系统,能不能打印成功取决于系统接下来用没用这块空间,没用到也就是没篡改,那就能打印出来


 本章到这里就结束啦,希望各位小伙伴可以点个关注,支持一下阿鹿,大家的鼓励是我前进的第一动力,3Q~

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

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

相关文章

SQLAlchemy常用数据类型

Integer :整形,映射到数据库中是 int 类型。 Float :浮点类型,映射到数据库中是 float 类型。他占据的 32 位。 Double :双精度浮点类型,映射到数据库中是 double 类型,占 据64 位 (SQLALCHEM…

低代码平台与自动化软件开发的关系

引言 随着信息技术的不断发展,软件开发领域也在不断演进。在追求更高效、更快速的软件开发过程中,低代码平台和自动化软件开发技术日益受到关注。低代码平台以其可视化开发界面和快速构建应用的能力,为非专业开发人员提供了参与软件开发的机会…

C语言数据类型——常量

目录 常量(Constant) 宏常量(Macro Constant) const常量​编辑 常量(Constant) 在程序中不能改变其值的量 包括: 整形(如:89,22……) *默认…

Python私有属性和私有方法

私有属性和私有方法 在实际开发中,对象的某些属性或者方法只希望在对象内部被使用,而不希望在外界被访问。 私有属性:对象不希望公开的属性 私有方法:对象不希望公开的方法 定义方式:在属性名或者方法名前添加两个下划…

KIOXIA铠侠CM7系列E3.S双端口NVMe2.0 PCIe5.0 SSD KCM71RJE7T68

KIOXIA 铠侠推出的CM7-R E3.S企业级NVMe读密集型企业级固态硬盘,采用PCIe 5.0和NVMe 2.0技术,性能出色,最高可达2,700K IOPS(随机读取)和310K IOPS(随机写入)1 DWPD的耐用性和高达15.36 TB的存储…

C++动态内存管理:new/delete与malloc/free的对比

在C中,动态内存管理是一个至关重要的概念。它允许我们在程序运行时根据需要动态地分配和释放内存,为对象创建和销毁提供了灵活性。在C中,我们通常会用到两对工具:new/delete 和 malloc/free。虽然它们都能够完成类似的任务&#x…

录视频软件怎么选?一起来看看这些热门推荐!

随着数字化时代的来临,视频已成为人们日常生活中不可或缺的一部分。无论是教学演示、游戏分享,还是会议记录,录视频功能都显得尤为关键。市面上录视频软件种类繁多,各有千秋。本文将详细介绍三款备受推崇的录视频软件,…

大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章

大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望—打造AI应用新篇章 0.前言大模型发展史 早期阶段(1950s~1980s) 在1950年代初期,人们开始尝试使用计算机处理自然语言文本。…

SQLAlchemy对数据进行CRUD操作

构建 session 对象 所有和数据库的 ORM 操作都必须通过一个叫做 session 的会话对象 来实现,通过以下代码来获取会话对象 代码实现 # SQLAlchemy对数据的CRUD #SQLAlchemy模型映射表结构. from sqlalchemy import create_engine,Column,Integer,String from sql…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(九): 聚酰亚胺PI薄膜的缺点有哪些

聚酰亚胺PI薄膜的缺点有哪些 聚酰亚胺(Polyimide,简称PI)薄膜是一种高性能、高温、高压、化学稳定、耐磨损、耐火、耐腐蚀的薄膜材料,具有优良的电绝缘性能、低介电常数和低介电损耗,能够有效阻止电流流动&#xff0c…

sonar+gitlab提交阻断 增量扫描

通过本文,您将可以学习到 sonarqube、git\gitlab、shell、sonar-scanner、sonarlint 一、前言 sonarqube 是一款开源的静态代码扫描工具。 实际生产应用中,sonarqube 如何落地,需要考虑以下四个维度: 1、规则的来源 现在规则的…

PHP 三元搜索 - 迭代与递归(Ternary Search)

计算机系统使用不同的方法来查找特定数据。有多种搜索算法,每种算法更适合特定情况。例如,二分搜索将信息分为两部分,而三元搜索则执行相同的操作,但分为三个相等的部分。值得注意的是,三元搜索仅对排序数据有效。在本…