E37.【C语言】动态内存管理练习题

news2024/10/8 16:10:03

目录

1.

答案速查

分析

源代码分析

反汇编代码分析(底层)

2.

答案速查

分析

3.

答案速查

分析

VS逐步调试


1.

求下列代码的执行结果

#include <stdio.h>
char* GetMemory(void)
{
	char p[] = "hello world";
	return p;
}

void Test(void)
{
	char* str = NULL;
	str = GetMemory();
	printf(str);
}

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

答案速查

乱码

分别是x86+debug和x64+debug下的运行结果

分析

源代码分析

GetMemory函数的p返回后,函数退出,栈空间(本题的hello world)会被销毁,交还操作系统,由操作系统来处理

此时printf(str);没有作用,str指向的hello world已经不存在,相当于str为野指针

反汇编代码分析(底层)

会单开一篇文章分析

2.

求下列代码的执行结果

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void GetMemory(char** p, int num)
{
	*p = (char*)malloc(num);
}

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

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

答案速查

分析

虽然能成功打印,但是有两处不规范的地方

1.malloc函数的返回值没有判断是否为空指针

2.有malloc但没有free,容易发生内存泄漏

具体分析和改法类似71.【C语言】动态内存管理(重点)(4)

3.

求下列代码的执行结果

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Test(void)
{
	char* str = (char*)malloc(100);
	strcpy(str, "hello");
	free(str);
	if (str != NULL)
	{
		strcpy(str, "world");
		printf(str);
	}
}

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

答案速查

分析

一个很明显不规范的地方

	strcpy(str, "hello");
	free(str);
	if (str != NULL)

备注:"hello"字符串 实际上在末尾有一个\0

VS报警告:

free后没有为str置为NULL(注:free函数不会自动为str置为NULL),导致str为野指针

使(str != NULL)成立,导致非法访问(strcpy(str, "world"); printf(str);)

VS逐步调试

free函数执行完后,被VS写入dd字符数组

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

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

相关文章

软件测试学习笔记丨allure学习指南

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32336 安装与下载 需要下载本地文件&#xff0c;并且添加到环境变量里 windows&#xff1a;下载&#xff0c;解压&#xff0c;并配置环境变量 mac&#xff1a;brew install allure 环境变量…

1688代采系统-反向海淘系统详细介绍

Onebound凡邦1688代采系统-反向海淘系统是一种专为海外买家及跨境电商提供一站式采购解决方案的平台。其核心功能和服务旨在解决跨境采购中的语言、货币等常见问题&#xff0c;并优化采购流程&#xff0c;提高采购效率。以下是对该系统的详细介绍。 一、核心功能 商品采集与展…

==与equals比较

在JVM中&#xff0c;内存分为堆内存跟栈内存。他们二者的区别是&#xff1a; 当我们创建一个对象&#xff08;new Object&#xff09;时&#xff0c;就会调用对象的构造函数来开辟空间&#xff0c;将对象数据存储到堆内存中&#xff0c;与此同时在栈内存中生成对应的引用&#…

【AI绘画】如何选择AI绘画工具?Midjourney VS Stable Diffusion?

前言 文章目录 &#x1f4af;如何选择合适的AI绘画工具 个人需求选择比较工具特点社区和资源 &#x1f4af; Midjourney VS Stable Diffusion&#xff1a;深度对比与剖析 使用费用对比使用便捷性与系统兼容性对比开源与闭源对比图片质量对比上手难易对比学习资源对比作品版权…

猎头是这样看简历的?

猎头在看简历时&#xff0c;会遵循一系列高效而系统的步骤&#xff0c;以确保筛选出最适合客户需求的候选人。以下是对猎头如何看简历的详细分析&#xff0c;内容虽无法精确控制在3000字以内&#xff0c;但将尽量精简并涵盖关键信息&#xff1a; 一、初步浏览与筛选 1.基本信…

FLIR AX8 download.php 任意文件读取复现

0x01 产品描述&#xff1a; FLIR-AX8是美国菲力尔公司&#xff08;Teledyne FLIR&#xff09;旗下的一款工业红外热像仪AX8&#xff0c;英文名为Teledyne FLIR AX8 thermal sensor cameras。菲力尔公司专注于设计、开发、生产、营销和推广用于增强态势感知力的专业技术&#xf…

栈与队列面试题(Java数据结构)

前言&#xff1a; 这里举两个典型的例子&#xff0c;实际上该类型的面试题是不确定的&#xff01; 用栈实现队列&#xff1a; 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;双栈 思路 将一个栈当作输入栈&#xff0c;用于压入 push 传入的数…

传统少数民族物品检测系统源码分享

传统少数民族物品检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

【C语言】分支和循环(3)

&#x1f600;个人主页: 起名字真南 &#x1f601;个人专栏 目录 1 for 循环1.1 语法形式1.2 执行流程图1.3 for循环的实践 2 do-while循环2.1 语法形式2.2 执行流程图2.3 do-while循环的实践 3 break 和 continue 语句4 goto语句 1 for 循环 1.1 语法形式 for循环是三种循环…

【Centos】系统安装虚拟系统管理器创建虚拟机

在windows服务器里使用vmware等工具轻松建立虚拟服务器&#xff0c;可以安装各种操作系统。 在Centos系统中默认安装菜单的系统工具中没有找到这个管理器的启动菜单&#xff0c;默认没有安装。 想使用KVM虚拟系统创建虚拟机如何操作呢&#xff1f;最简单就是下面这些命令&…

ViT(Vision Transformer详解)

Transformer作为前沿的深度学习框架&#xff0c;带有多模态的特性&#xff0c;对于不同类型的输入数据&#xff0c;不管是文本还是图像均可进行处理&#xff0c;而ViT则是对于Transformer中的视觉方面&#xff08;也就是输入数据为图像&#xff09;的衍生物&#xff08;因Trans…

从基础到精通:构建并微调大型语言模型以实现分类任务

本章内容 介绍不同的大型语言模型&#xff08;LLM&#xff09;微调方法准备用于文本分类的数据集修改预训练LLM以便进行微调微调LLM以识别垃圾信息评估微调后的LLM分类器的准确性使用微调后的LLM对新数据进行分类 到目前为止&#xff0c;我们已经编写了LLM的架构、对其进行了…

小程序和h5深度分析

你写过小程序/H5&#xff0c;那你知道他们的区别在哪里吗&#xff1f; 为什么说小程序的性能通常优于 H5? 小程序能访问到 DOM 对象吗&#xff1f; 小程序的原理是什么&#xff1f; 小程序和 H5 都是轻量级的、可直接在移动设备上运行的应用&#xff0c;但它们之间存在一些关…

C语言的类型提升机制

概念 在C语言中&#xff0c;整数类型按照其大小可以分为以下几类&#xff08;从小到大&#xff09;&#xff1a; charshortintlonglong long 当在表达式中涉及这些类型的混合运算时&#xff0c;较小的类型会被提升为较大的类型。具体规则如下&#xff1a; ①char 和 short …

【NLP自然语言处理】02 - NLP简介/NLP发展历史/应用场景

1.什么是自然语言处理 (NLP) 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能的一个重要分支&#xff0c;旨在通过计算机实现对人类自然语言的理解、生成和互动。其核心任务包括分析、生成和转换人类语言&#xff0c;涉及语法、语义、语音识…

Mapsui绘制WKT的示例

步骤 创建.NET Framework4.8的WPF应用在NuGet中安装Mapsui.Wpf 4.1.7添加命名空间和组件 <Window x:Class"TestMapsui.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…

基于单片机的烧水壶系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC单片机&#xff0c;采用四个按键&#xff0c;通过DS18B20检测温度&#xff0c;开机显示实时温度 第一个按键为切换功能按键&#xff0c;按下后&#xff0c;可以设置烧水温度的大小&…

codetop标签双指针题目大全解析(三),双指针刷穿地心!!!!!

复习比学习更重要&#xff0c;更需要投入时间&#xff0c;更需要花费精力 1.字符串的排列2.找出字符串中第一个匹配的下标3.最大连续1的个数II4.数组中的山脉5.移除元素6.两个数组的交集II7.有序数组的平方8.删除有序数组中的重复项II9.寻找重复数10.水果成篮 1.字符串的排列 …

HUAWEI_HCIA_实验指南_Lib1.4_配置通过Telnet登录系统

一、原理概述 Telnet(Telecommunication Network Protocol)起源于ARPANET,是最早的Internet应用之一。 Telnet 通常用在远程登录应用中&#xff0c;以便对本地或远端运行的网络设备进行配置、监控和维护。如网络中有多台设备需要配置和管理&#xff0c;用户无需为每一台设备…

C++ 算法学习——7.4.1 优化算法——双指针

双指针法&#xff08;Two Pointers&#xff09;是一种常用的算法技巧&#xff0c;通常用于解决数组或链表中的问题。这种技巧通过维护两个指针&#xff0c;通常分别指向数组或链表的不同位置&#xff0c;来协同解决问题。双指针法一般有两种类型&#xff1a;快慢指针和左右指针…