[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.hqwc.cn/news/601885.html

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

相关文章

图像版PDF文件OCR识别转换为文本的3款免费工具软件

图像版PDF文件里面都是图片,要先通过OCR技术识别出文本,然后才能进行进一步处理编辑。下面是3个免费的PDF文件OCR识别软件工具: ●简可信PDF批量识别工具 简可信PDF批量识别工具是一款专门用于将PDF文件进行批量OCR(光学字符识别…

三星:HBM4的16层堆叠技术验证成功

随着人工智能、大数据分析、云计算及高端图形处理等领域对高速、高带宽存储需求的激增,下一代高带宽内存(High Bandwidth Memory, HBM)——HBM4已成为全球存储芯片巨头三星、SK海力士和美光竞相追逐的技术高地。 随着AI、机器学习以及高性能…

【大数据】常见问题解决1

目录 一、解决虚拟机ping www.baidu.com 不通问题 二、解决HBase集群中的Hmaster节点刚启动就消息 三、 Hadoop3.x和Hadoop2.x的区别 一、解决虚拟机ping www.baidu.com 不通问题 1)首先保证主机连上网络 2)sudo vim /etc/resolv.conf 3)…

Linux-等待子进程

参考资料:《Linux环境编程:从应用到内核》 僵尸进程 进程退出时会进行内核清理,基本就是释放进程所有的资源,这些资源包括内存资源、文件资源、信号量资源、共享内存资源,或者引用计数减一,或者彻底释放。…

(1)步态识别论文研读GaitSet: Regarding Gait as a Set for Cross-View Gait Recognition

题目:GaitSet 将跨视角步态识别识别任务中的步态视为一个集合 摘要: 作为一个可以在一定距离内识别的独特的生物特征,步态识别在预防犯罪、法医鉴定,和社会保障等方面具有广阔的应用前景,为了描述一个步态&#xff0…

RabbitMQ基本使用及企业开发中注意事项

目录 一、基本使用 二、使用注意事项 1. 生产者重连机制 - 保证mq服务是通的 2. 生产者确认机制 - 回调机制 3. MQ的可靠性 4. Lazy Queue模式 5. 消费者确认机制 一、基本使用 部署完RabbitMQ有两种使用方式: 网页客户端Java代码 MQ组成部分:…

【深度学习】图像风格混合——StyleGAN原理解析

1、前言 上一篇,我们讲了PGGAN的模型原理,本章我们就来讲解一下StyleGAN,这个模型能够自由控制图像的风格,细节变化等等,生成用户想要的图像,甚至从某种程度上说,其可以实现AI换脸。 PS&#…

【跟我每天学习1个QT类】QLibrary类 — 加载管理动态链接库的类

一、QLibrary类简介 由于项目原因,QT软件经常会调用各种各类的库函数,Qt框架中提供的一个类,用于在运行时动态加载和访问共享库(也称作动态链接库,DLLs),实现对库中函数、变量等符号的透明调用…

市场复盘总结 20240408

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率 33% 最常用的…

【CTF】rip--堆栈的简单认识

前言 最近在学二进制,准备拿BUUCTF的pwn试试手,还在摸索的阶段,有什么思路出错的地方还请指出。 解题思路 下载文件到kali,查看文件为 64-bit的ELF(ELF为Linux下的可执行文件,相当于Windows的exe&#xff0…

Verilog语法——按位取反“~“和位宽扩展的优先级

前言 先说结论,如下图所示,在Verilog中“~ ”按位取反的优先级是最高的,但是在等式计算时,有时候会遇到位宽扩展,此时需要注意的是位宽扩展的优先级高于“~”。 验证 仿真代码,下面代码验证的是“~”按位取…

合并两个有序数组——每日一题

题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&…