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

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中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java中的CompletableFuture核心用法和常见场景

《Java中的CompletableFuture核心用法和常见场景》CompletableFuture是Java8引入的强大的异步编程工具,支持链式异步编程、组合、异常处理和回调,介绍其核心用法,通过... 目录1、引言2. 基本概念3. 创建 CompletableFuture3.1. 手动创建3.2.

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

解决java.util.RandomAccessSubList cannot be cast to java.util.ArrayList错误的问题

《解决java.util.RandomAccessSubListcannotbecasttojava.util.ArrayList错误的问题》当你尝试将RandomAccessSubList... 目录Java.util.RandomAccessSubList cannot be cast to java.

Java编译错误java.lang.NoSuchFieldError的解决方案详析

《Java编译错误java.lang.NoSuchFieldError的解决方案详析》java.lang.NoSuchFieldError是Java中的一种运行时错误,:本文主要介绍Java编译错... 目录前言解决方案1. 统一JDK版本环境2. 优化maven-compiler-plugin配置3. 清