C语言 ——— 经典有关动态内存的笔试题

embedded/2024/9/20 4:01:56/ 标签: c语言

目录

笔试题1

笔试题2

笔试题3 


笔试题1

代码演示:

#include<stdio.h>
#include<string.h>
void GetMemory(char* p)
{p = (char*)malloc(100);
}
void Test()
{char* str = NULL;GetMemory(str);strcpy(str, "hello world");printf("%s\n", str);
}
int main()
{Test();return 0;
}

问:

运行 Test 函数会有怎样的结果?是否能正常运行 "hello world" 字符串?

代码解析:

Test 函数中创建了 char* 变量 str ,并赋值为空,将 str 值传递给 GetMemory 函数,GetMemory 函数创建临时指针变量 p 用来接收,并让 p 指向 malloc 动态开辟的 100 个字节的空间,回到 Test 函数后 str 还是空指针,GetMemory 函数并没有改变 str 的指向,所以 strcpy 函数运行时必然会报错,因为要对 str 指针解引用,这就是对空指针解引用操作,程序会直接崩溃

代码验证:


笔试题2

代码演示:

char* GetMemory()
{char p[] = "hello world";return p;
}
void Test()
{char* str = NULL;str = GetMemory();printf("%s\n", str);
}
int main()
{Test();return 0;
}

问:

现在这个代码运行的结果是什么,为什么? 

代码解析: 

GetMemory 函数创建了一个 char 类型的数组 p ,并存储了 "hello world" 字符串, 最后将 p 这个首地址返回,但是数组 p 的生命周期只在进入 GetMemory 函数时创建,运行完 GetMemory 函数时结束,也就是将 p 数组所存储的空间还给了操作系统,但是 p 是指向这块空间的起始地址,赋值给 str 指针后打印,那么打印的结果只能是随机字符

代码验证:


笔试题3 

代码演示: 

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

问:

代码是否能正常运行,为什么?

代码解析: 

str 址传递给 GetMemory 函数,并开辟了 100 个字节的动态空间,在用 strcpy 函数将 "hello world" 字符串拷贝到 str 指向的动态空间中,最后再打印

代码验证:


http://www.ppmy.cn/embedded/100755.html

相关文章

C++ | Leetcode C++题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:int getSum(int a, int b) {while (b ! 0) {unsigned int carry (unsigned int)(a & b) << 1;a a ^ b;b carry;}return a;} };

工厂现场多功能帮手,三防平板改善管理体验

随着制造业的智能化变革&#xff0c;信息化、自动化和智能化逐渐成为工厂管理的新常态。在这一波技术浪潮中&#xff0c;三防平板作为一种多功能的工作工具&#xff0c;正在逐步改善工厂现场的管理体验。 一、三防平板的定义与特点 三防平板&#xff0c;顾名思义&#xff0c;是…

02_React面向组件编程--基本使用与理解、组件实例的三大核心属性与事件处理

基本使用与理解、组件实例的三大核心属性与事件处理 一、基本理解与使用1、函数式组件2、类的复习3、类式组件4、简单组件和复杂组件 二、组件实例的三大核心属性 1&#xff1a;state1、例子&#xff0c;点击文字切换 凉爽和炎热1.1 复习--原生事件绑定方式1.2 复习--类中的方法…

Redis篇一:初识Redis

文章目录 前言1. 初始Redis2. MySQL VS Redis3. 什么是分布式系统&#xff08;也是一种处理大量数据时的处理方式&#xff09;3.1 单机架构3.2 数据库与应用服务分离3.3 负载均衡3.4 数据库读写分离3.5 引入缓存&#xff08;Redis&#xff09;3.6 数据库分库分表3.7 引入微服务…

网络udp及ipc内存共享

大字符串找小字符串 调试 1. 信号处理函数注册&#xff1a;•一旦使用 signal 函数注册了信号处理函数&#xff0c;该函数就会一直有效&#xff0c;直到程序结束或者显式地取消注册。2. 注册多次的影响&#xff1a;•如果多次注册同一信号的处理函数&#xff0c;最后一次注册的…

Java RPC、Go RPC、Node RPC、Python RPC 之间的互相调用

Java RPC、Go RPC、Node RPC、Python RPC 之间的互相调用是完全可以实现的&#xff0c;但需要满足一些条件和依赖于特定的工具和协议。以下是如何实现不同语言之间的RPC互相调用的详细解释&#xff1a; 1. 使用通用协议和标准&#xff1a;gRPC gRPC 是一个高性能、开源的RPC框…

SSRF漏洞——pikachu

环境搭建 pikachu文件如下&#xff1a; 通过百度网盘分享的文件&#xff1a;pikachu-master.zip 链接&#xff1a;https://pan.baidu.com/s/1HuV2llJzx1c7Ii6u-r4s3Q?pwdqwer 提取码&#xff1a;qwer 解压至小皮WWW文件夹下&#xff0c;进入config.inc.php中修改MySQL名字…

深信达反向沙箱:构筑内网安全与成本效益的双重防线

# 深信达反向沙箱&#xff1a;内网安全与成本控制的双重保障 在数字化时代&#xff0c;企业面临着日益复杂的网络安全挑战。内网安全尤其关键&#xff0c;因为它涉及到企业的核心数据和运营。深信达的反向沙箱技术&#xff0c;作为一种创新的安全解决方案&#xff0c;为政企单…

基于Android的运动记录APP设计与实现(论文+源码)_kaic

摘要 随着人们生活水平和生活质量的提高&#xff0c;人们越来越关注自己的身体健康。而跑步成为人们最受欢迎的运动方式&#xff0c;运动软件可以在人们锻炼身体的时候提供极大的帮助。本文针对运动轨迹和计步&#xff0c;设计一款基于Android 平台的运动软件。本系统通过使用百…

【OCPP】ocpp1.6协议第5.14 Reset章节的介绍及翻译

目录 5.14 重置Reset-概述 概述 消息格式 操作流程 重置类型 消息示例 错误处理 注意事项 安全性 5.14 重置Reset-原文译文 5.14 重置Reset-概述 在OCPP 1.6协议中,第5.14章节“Reset”主要讲述了中央系统(CSMS, Central System)如何向充电站(CS, Charge Statio…

培训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)

上午 1、roles&#xff08;角色&#xff09;介绍 roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独 的⽬录中,并可以便捷地调⽤它们的⼀种机制。 假设我们要写⼀个playbook来安装管理lamp环境&#xff0c;那么这个 playbook就会写很⻓。所以我们希望把这…

ES详细使用!Elasticsearch实现索引操作,增删改查,批处理

要想知道ES怎么具体实现对数据的操作&#xff0c;我们首先应该了解一下什么叫做restful编码风格&#xff0c;因为es的具体操作都是restful风格的。 1.RESTful风格 RESTful 是一种软件架构风格&#xff0c;用于创建可扩展的网络服务。它使用 HTTP 方法&#xff08;如 GET、POS…

C++竞赛初阶L1-13-第五单元-循环嵌套(29~30课)538: T456457 第 n 小的质数

题目内容 输入一个正整数 n&#xff0c;求正整数范围中第 n 小的质数。 输入格式 一个不超过 30000 的正整数 n。 输出格式 第 n 小的质数。 样例 1 输入 10 全部程序代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {long long n,i;ci…

StarRocks 存算分离数据回收原理

前言 StarRocks存算分离表中&#xff0c;垃圾回收是为了删除那些无用的历史版本数据&#xff0c;从而节约存储空间。考虑到对象存储按照存储容量收费&#xff0c;因此&#xff0c;节约存储空间对于降本增效尤为必要。 在系统运行过程中&#xff0c;有以下几种情况可能会需要删…

Linux运维、Windows运维常用命令,保存起来当手册用

文章目录 一、centos基本命令1、升级内核到最新版本2、文件句柄数限制优化3、ssh、sftp、scp等远程命令4、find文件查找5、vi命令 二、windows常用操作 一、centos基本命令 1、升级内核到最新版本 # 1、查看内核版本 [rootlocalhost ~]# cat /etc/centos-release CentOS Linu…

关于Spring Boot的自动配置

目录 1.EnableAutoConfiguration注解 2.SpringBootConfiguration注解 3.Import注解 4.spring.factories 5.总结 &#xff08;1&#xff09;EnableAutoConfiguration &#xff08;2&#xff09;AutoConfigurationImportSelector &#xff08;3&#xff09; SpringFactoriesLoade…

G1处理器GC调优常用参数详解

mixGC触发机制&#xff1a; G1 垃圾收集器在执行垃圾收集时&#xff0c;会根据不同的情况选择不同的垃圾收集策略&#xff0c;其中 "Mixed GC" 是一种比较复杂的策略&#xff0c;用于回收整个堆内存中的垃圾。 G1 垃圾收集器执行 Mixed GC 的时机通常取决于以下几个…

【Python进阶(十)】——Matplotlib基础可视化

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

Java泛型机制详解

引入泛型的原因 泛型的本质是为了参数化类型&#xff08;在不创建新的类型的情况下&#xff0c;通过泛型指定的不同类型来控制形参具体限制的类型&#xff09;。也就是说在泛型使用过程中&#xff0c;操作的数据类型被指定为一个参数&#xff0c;这种参数类型可以用在类、接口…

一、HTML5知识点精讲

一、HTML5介绍 html是用来描述网页的一种语言&#xff08;就是写网页的一种语言&#xff09;。 它和CSS&#xff0c;JS称为网页三要素。 HTML负责把元素简单呈现在网页上&#xff0c;是网页的身体CSS负责给网页元素添加各种样式&#xff0c;是网页的衣服JS负责实现各种动态、…