【C】关于动态内存的试题及解析

news2024/9/29 15:25:06

目录

 第1题:

 第2题:

 第3题:

 第4题:

 第5题:


 在学习了关于动态开辟内存的相关知识后,下面是一些涉及到动态开辟内存程序的试题及解析(试题部分来自《高质量的C/C++编程》、笔试题)。

第1题

分析下面这段代码,为什么运行错误?

代码

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

int main()
{
	Test();
	return 0;
}

解答分析:

1.对NULL指针进行了解引用操作,程序会崩溃

2.没有释放空间,内存泄漏的问题

3.str为指针变量,传递到函数中,只是拷贝了一份也就是p,形参p的改变不影响str,p指向的malloc开辟的空间会在函数外被收回。

以下是改进后的程序👇

 第2题

分析下面这段代码,运行结果为什么是乱码?

代码

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

}
int main()
{
	Test();
	return 0;
}

解答分析:

 p被返回时,p指向的空间同时因为出函数而被系统收回,所以str被赋予野指针,用printf打印str所指空间属于非法访问。

 

 第3题

分析下面两段代码,为什么结果大不相同??

代码

int* test()
{
	int a = 10;
	return &a;
}
int main()
{
	int* p=test();
	printf("hehe");
	printf("%d\n", *p);
	return 0;
}

 解答分析:

从函数栈帧角度分析,test开辟的函数栈帧收回后,没有被系统及时利用,就有可能被指针访问到之前的内容,之后被printf重新利用后,原有内容被覆盖。👇

 第4题

下面这段程序有什么错误?

代码

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

 解答分析:

 这段程序能够运行成功,唯一错误的地方就是malloc在开辟内存空间后,没有用free释放这段空间。容易造成内存泄漏。

 用free正确释放malloc开辟的空间👇

 第5题

为什么下面这段程序运行结果为乱码??

代码

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

int main()
{
	Test();
	return 0;
}

解答分析:

str所指的空间被free释放后,空间交换给系统,str变为野指针,属于非法访问。

在free释放str所指向空间后应该及时str=NULL置空,且不能在访问。

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

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

相关文章

2023年【上海市安全员A证】报名考试及上海市安全员A证试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 上海市安全员A证报名考试是安全生产模拟考试一点通总题库中生成的一套上海市安全员A证试题及解析,安全生产模拟考试一点通上上海市安全员A证作业手机同步练习。2023年【上海市安全员A证】报名考试及上海市…

智能指针(C++11)

行到水穷处,坐看云起时。 文章目录 简介内存泄漏内存泄漏分类内存泄漏检测工具 RAII智能指针原理智能指针使用std::auto_ptrstd::unique_ptrstd::shared_ptrstd::shared_ptr循环引用 std::weak_ptr 总结 简介 C智能指针是在C11标准引入的一项重要功能,用…

建模仿真软件 Comsol Multiphysics mac中文版软件介绍

COMSOL Multiphysics mac是一款全球通用的基于高级数值方法和模拟物理场问题的通用软件,拥有、网格划分、研究和优化、求解器、可视化和后处理、仿真 App等相关功能,轻松实现各个环节的流畅进行,它能够解释耦合或多物理现象。 附加产品扩展了…

Postman接口测试,全网最详细教程

Postman的脚本可以导出多种语言的脚本,方便二次维护开发。 Python的requests库,支持python2和python3,用于发送http/https请求 使用unittest进行接口自动化测试 0 1****环境准备 1、安装python (使用python2或3都可以&#x…

Spring源码-4.Aware接口、初始化和销毁执行顺序、Scope域

Aware接口 其实在生命周期中,Aware接口也参与进来了,如图所示: 如初始化时的第三步,其实就是调用了Aware相关接口。 以常见的Aware接口举例: 1.BeanNameAware 主要是注入Bean的名字 2.BeanFactoryAware 主要是时注…

ESP32开发日志记录

用过一段时间的ESP8266开发, 是在ubunut下建立的开发环境,现在ESP32更简单,直接在Window下IDE即可完成系统配置、新建工程及编译下载工作,使用起来更加简便 一、生成ESP32的工程运行出错 大概意思的芯片是单核芯片,但…

有什么软件能实现erp、crm、oa、财务系统一体化?

只要你能梳理清楚业务逻辑,没有代码基础也完全可以自己搭建业务系统,比ERP管理系统、工程项目管理系统等等......用简道云就可以轻松实现: 下面来按照题主的需求介绍几个系统: 01 客户关系——CRM客户管理套件 重磅打造客户跟进、…

阿里p8推荐,测试覆盖率工具—Jacoco

测试覆盖率工具 测试过程中根据需求文档和设计文档编写测试用例、执行测试;为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试执行情…

鉴源论坛 · 观擎丨基于模型的方法在民机机载软件中的应用

作者 | 蔡喁 上海控安可信软件创新研究院副院长 版块 | 鉴源论坛 观擎 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 基于模型的开发和验证MBDV 模型泛指用于支持软件开发过程或软件验证过程的系统的一组软件方面的抽象表示,在机载软件…

【深度学习】【NLP】如何得到一个分词器,如何训练自定义分词器:从基础到实践

文章目录 什么是分词?分词算法使用Python训练分词器步骤1:选择分词算法步骤2:准备训练语料步骤3:配置分词器参数步骤4:训练分词器步骤5:测试和使用分词器 代码示例:使用SentencePiece训练分词器…

技术分享| anyRTC低延时直播优化

直播系统就是把活动现场的音频或视频信号经数字压缩后,传送到直播多媒体服务器(CDN)上,在互联网上供广大网友或授权特定人群收听或收看。而随着技术的日益更新,人民对于直播的互动性,实时性要求更高了,传统的直播少则几…

C语言编写图形化界面-创建按钮-为其指定样式

文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式(对话框Enter键) 设置按钮位置和大小封装函数 前置章节 开始之前,需要学习以下章节: 创建窗口 窗口过…

10G传输分析仪SDH表TFN D450S参数详情

D450S 10G SDH系列 SDH/SONET传输测试模块 D450S系列SDH/SPNET传输测试模块是TFN模块化测试产品中的一款。D450S系列可配置在FT100测试平台上,实现广泛的PDH/DSn和SDH/SONET的测试功能,为城域网提供综合的测试方案,是高性价比的网络测试产品…

500内部服务器错误很常见,但解决方法也很常见

500内部服务器错误是一个非常通用的HTTP状态代码,这意味着网站的服务器出现了问题,但服务器无法更具体地说明具体问题是什么。 HTTP 500内部服务器错误的原因 大多数情况下,当页面或网站的编程出现问题时,就会出现此错误,但问题肯定在你这边。这些问题可能是由浏览器中的…

Linux系统之file命令的基本使用

Linux系统之file命令的基本使用 一、file命令介绍1.1 Linux简介1.2 file命令简介 二、file命令的使用帮助2.1 file命令的help帮助信息2.2 file命令的语法解释2.3 file命令的man手册 三、文件类型介绍四、file命令的基本使用4.1 查询file版本4.2 显示文件类型4.3 输出时不显示文…

selenium+python web自动化测试框架项目实战实例教程

自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行... 可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到实际项目中&…

基于springboot实现校友社交平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校友社交平台管理系统演示 摘要 校友社交系统提供给用户一个校友社交信息管理的网站,最新的校友社交信息让用户及时了解校友社交动向,完成校友社交的同时,还能通过论坛中心进行互动更方便。本系统采用了B/S体系的结构,使用了java技…

C++模板类用作参数传递

前言 在模板类<>传递参数的一种实现。记不住&#xff0c;以此记录。 // dome.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _CRT_SECURE_NO_WARNINGS #include <iostream> //#include "tools.h" #include <fu…

一种基于屏幕分辨率的RTSP主子码流切换的多路视频监控的播放方案

技术背景&#xff1a; 用户场景下&#xff0c;存在多个监控场所的100路监控摄像头&#xff0c;例如&#xff1a;大华、海康、宇视、杭州宇泛的枪机、球机、半球、NVR、DVR等不同类型的监控设备&#xff0c;通过视频监控平台进行设备的管理&#xff0c;通过RTSP拉流的方案管理监…

python自动化测试平台开发:自动化测试平台简介

一.测试平台简介 为什么需要测试平台 已有的开源测试平台不能满足需要&#xff0c;不要轻易造轮子 需要公司级别的定制 需要整合公司内部的多套平台 例子&#xff1a;DevOps平台、精准化测试平台、质量监控平台等等 常见的测试平台开发模式 大一统模式&#xff08;适合简单的…