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

2024-03-26 15:28

本文主要是介绍动态内存管理一一常见错误与习题练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、常见错误

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.chinasem.cn/article/848953

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

MySQL ORDER BY 语句常见用法、示例详解

《MySQLORDERBY语句常见用法、示例详解》ORDERBY是结构化查询语言(SQL)中的关键字,隶属于SELECT语句的子句结构,用于对查询结果集按指定列进行排序,本文给大家介绍MySQL... 目录mysql ORDER BY 语句详细说明1.基本语法2.排序方向详解3.多列排序4.常见用法示例5.