[C语言]——动态内存经典笔试题分析

目录

一.题目1

1.运行结果

2.分析

3.问题所在

4.更正

二.题目2 

1.运行结果

2.分析

3.问题所在

4.更正

三.题目3

1.问题所在

2.更正:

四.题目4


一.题目1

void GetMemory(char *p){p = (char *)malloc(100);}void Test(void){char *str = NULL;GetMemory(str);strcpy(str, "hello world");printf(str);}

1.运行结果

2.分析

3.问题所在

 
4.更正

void GetMemory(char **p){*p = (char *)malloc(100);}void Test(void){char *str = NULL;GetMemory(&str);strcpy(str, "hello world");printf(str);free(str);str=NULL;}

二.题目2 

char *GetMemory(void){char p[] = "hello world";return p;}void Test(void){char *str = NULL;str = GetMemory();printf(str);}

1.运行结果

2.分析

str为指针变量

3.问题所在

这是一个返回栈空间地址的问题,str虽然能通过地址找到所对应的空间,但是一旦出GetmMemory函数中,空间已经还给操作系统,空间已经没有使用权限,此时的str就是野指针,print调用的时候,会将绿色区域覆盖

4.更正

char *GetMemory(void){static char p[] = "hello world";return p;}void Test(void){char *str = NULL;str = GetMemory();printf(str);}

代码简化: 

 

三.题目3

void GetMemory(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);}

1.问题所在

存在内存泄漏的问题

2.更正:

void GetMemory(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);fre(str);str=NULL;}

四.题目4

void Test(void){char *str = (char *) malloc(100);strcpy(str, "hello");free(str);  //此步骤后,str为野指针了if(str != NULL){strcpy(str, "world"); //非法访问printf(str);}}

更正:

void Test(void){char *str = (char *) malloc(100);strcpy(str, "hello");free(str);  str=NULL;//应该手动置为空if(str != NULL){strcpy(str, "world"); printf(str);}}

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

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

相关文章

2024春算法训练4——函数与递归题解

一、前言 感觉这次的题目都很好,但是E题....(我太菜了想不到),别人的题解都上百行了,晕; 二、题解 A-[NOIP2010]数字统计_2024春算法训练4——函数与递归 (nowcoder.com) 这种题目有两种做法:…

泛微OA 自定义多选浏览框

1、建模引擎-》应用建模-》表单 2、建模引擎-》应用建模-》模块 3、建模引擎-》应用建模-》查询 4、把查询页面挂到前端页面。 效果展示: 5、建模引擎-》应用建模-》浏览框 6、流程表单中字段应用

Windows Edge浏览器的兼容性问题及解决方案

1、Windows Edge(了解 Microsoft Edge): 简单介绍: Microsoft Edge是一款由微软开发的网页浏览器,最初于2015年伴随Windows 10推出,作为Internet Explorer的继任者,旨在提供更快、更安全、更现代…

CV论文--2024.4.8

1、OW-VISCap: Open-World Video Instance Segmentation and Captioning 中文标题:OW-VISCap:开放世界视频实例分割和字幕 简介:开放世界视频实例分割是一项重要的视频理解任务,然而现有的方法存在一些限制。大多数方法要么只能在…

Springer旗下28年老刊,仅1个月录用,首个CCF推荐将被剔除?

毕业推荐 SSCI • 社科类,分区稳步上升(最快13天录用) IEEE: • 计算机类,1区(TOP),CCF推荐 SCIE • 计算机工程类,CCF推荐(最快16天录用) 近日更新报道新增5本期刊…

智能网联汽车自动驾驶数据记录系统DSSAD数据配置

目录 第一章 数据配置一般要求 第二章 数据配置文件中的文件描述 第三章 数据配置文件中的数据描述 第四章 数据配置文件中的数据字典 表A.1 数据字典格式定义 第一章 数据配置一般要求 数据配置文件数据内容应为可读的十进制数据。 数据配置文件应以文件的形式存储在自动驾驶…

Day79:服务攻防-中间件安全IISApacheTomcatNginx弱口令不安全配置CVE

目录 中间件-IIS-短文件&文件解析&蓝屏&写权限 HTTP.SYS(CVE-2015-1635)主要用作蓝屏破坏,跟权限不挂钩 IIS短文件(iis全版本都可能有这个问题) IIS文件解析 IIS写权限 中间件-Nginx-文件解析&目录穿越漏洞&CRLF …

Leetcode 142. 环形链表 II和Leetcode 242. 有效的字母异位词

文章目录 Leetcode 142. 环形链表 II题目描述C语言题解解题思路 Leetcode 242. 有效的字母异位词题目描述C语言题解和思路解题思路 Leetcode 142. 环形链表 II 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返…

MySQL【查询】

与查询直接相关的语句 基本查询语句:包括SELECT、INSERT、UPDATE和DELETE等SQL语句,用于执行常见的数据操作。 **WHERE子句:**用于指定条件,限制SELECT语句返回的行。 SELECT语句示例: -- 检索所有列的数据 SELECT…

rust 异步zip解压缩

在使用actix-web框架的时候,如果使用zip解压任务将会占用一个工作线程,因为zip库是同步阻塞的,想用异步非阻塞需要用另一个库,下面列出同步解压,跟异步解压的两个方法实现,异步解压不会占用工作线程。 阻塞…

Git 配置BCompare工具

一、Git配置BCompare工具 1、安装BCompare工具 下载BCompare安装包,打开安装包直接安装即可,如下: 2、禁止BCompare访问网络 网络进出站进行配置,限制BCompare访问网络,如果不进行上网限制,可能存在被封的…

接口新增方法

JDK8开始接口新增的方法 JDK7以前:接口只能定义抽象方法 JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态) JDK9的新特性:接口中可以定义私有方法 JDK8以后接口中新增的方法: 允许在接口中定义默认…

【24届数字IC秋招总结】实习面试经验——华为芯片与器件设计工程师实习生

文章目录 前言一、笔试和性格测试二、面试2.1 技术面2.2 hr面前言 实习:笔试 + 1轮技术面 + 1轮主管面 一、笔试和性格测试 笔试题链接 1、网上可以找到很多以往的题目,需要注意的是数字芯片岗位会考到很多验证、中后端的知识,主打一个全栈,不要只看设计或者只看验证的东…

tx-lcn使用

tx-lcn是啥 tx-lcn是一个分布式事务框架,有两个模块组成管理端(server)和client端。 管理端用于分布式事务的注册,事务消息接收,事务消息下发等管理工作。 client端包括事务发起方,事务参与方。 LCN名称是…

11.手写JavaScript apply方法

一、核心思想 apply方法和call方法相似,区别在于参数,我们可以使用apply方法的原理实现apply方法 二、代码实现 /*** 手写apply* param {Function} o 函数* param {Array} args 数组* return 根据具体情况考虑*/ function Fn(a,b,c,d){console.log(&q…

Spring Security——08,自定义失败处理

自定义失败处理 一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint 二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足 一键三连有没有捏~~ 我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json&#xff0c…

定义默认参数要牢记一点:默认参数必须指向不变对象!

定义默认参数要牢记一点:默认参数必须指向不变对象! 默认参数很有用,但使用不当,也会掉坑里。默认参数有个最大的坑,演示如下: 先定义一个函数,传入一个list,添加一个END再返回&am…

工业视觉检测

目录 我对工业视觉检测的了解 一、关键组成部分 二、应用场景 三、技术挑战 我对工业视觉检测的了解 工业视觉检测是利用机器视觉技术对产品质量进行自动化检查的过程,它在制造业中扮演着至关重要的角色,用于确保产品质量、提高生产效率、减少人工成…

比特币4种地址格式

原生隔离见证、嵌套隔离见证、Taproot和Legacy都是比特币网络中不同的比特币地址格式或交易类型。每一种都有自己的特点和好处: 1.本地隔离见证(Segregated Witness Bech32): 钱包的支持 Phantom, Leather, Unisat, Okex Wallet 本地隔离见证地址以 bc1开始,也称为…

动态规划(2)

动态规划&#xff08;2&#xff09; 文章目录 动态规划&#xff08;2&#xff09;1、聪明的寻宝人2、基因检测3、药剂稀释4、找相似串 1、聪明的寻宝人 #include <iostream> using namespace std; void MaxValue(int values[], int weights[], int n, int m) {int dp[21…