当前位置: 首页 > news >正文

C语言笔试题(1)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,“hello world”);
}
int main(void)
{
char *str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return 0;
}
上述程序执行后会出现什么问题?
答:
问题所在:(我的理解)原题中str是个空指针,getmemory函数把str的NULL这个值赋给了形参p,p是一个区别于str的另一个字符指针,函数中执行malloc函数在堆中动态分配了100字节内存,malloc函数最后return了100字节的首地址,并将这首地址强制转换为char 类型赋值给了形参p,strcpy函数将字符串常量“hello world”复制给了p所指向的字符串(区别于p=“hello world”,如果用这个替代strcpy这行代码则原理是“hello world”的首地址赋值给了p)。str的值依然没有改变,p和str是两个变量,互不干扰,唯一相关的就是str的值复制给了p。所以若printf(“%s/n”,str),str仍是NULL,所以打印str为空。对于free(str),free一个空指针对内存来说没有任何影响,这是允许的,也没任何害。但是,在getmemory函数里动态分配的内存未释放掉,将会导致内存泄漏,又没办法把这段内存找回来,虽然形参p里存储这段内存的首地址,但他是形参,是函数里定义的变量,存放于栈中,在函数执行完就被释放掉了,所以没有人知道动态分配的这段内存在哪儿,唯一与这段内存有关系的p不存在了。
解决办法:根本原因是形参p和str为两个不同变量,只需将str的地址赋值给形参p,这样
p就是真正的str本体,后续的操作也就有效,不会存在内存泄漏,动态分配的内存也正常被释放掉。

相关文章:

C语言笔试题(1)

#include <stdio.h> #include <stdlib.h> #include <string.h> void getmemory(char *p) { p(char *) malloc(100); strcpy(p,“hello world”); } int main(void) { char *strNULL; getmemory(str); printf(“%s/n”,str); free(str); return 0; } 上述程序…...

网络连接的三种模式

文章目录前言一、三种连接模式介绍二、三种网络连接模式的区别前言 在进行虚拟机配置时&#xff0c;网络连接分为三种模式&#xff1a;桥接模式&#xff0c;NAT模式&#xff0c;主机模式 一、三种连接模式介绍 张三、李四、王五在同一个网段&#xff0c;所以他们之间可以相互…...

大学模拟电路期末考试模拟题详解

&#xff08;一&#xff09;选择题 3.4.5.6.7.8.9.10. &#xff08;二&#xff09;填空题 1.漂流电流是温度电流&#xff0c;它由少数、载流子形成、其大小与温度有关&#xff0c;而与外加电压无关。 反向电流是由少数载流子形成、其大小与温度有关&#xff0c;而与外加电压无…...

C/C++内存管理讲解

c/C内存管理讲解 C/C内存分布 首先通过一些题目的引入讲解带大家走进C/C的内存分布。 eg1&#xff1a; 根据上述变量的定义&#xff0c;来判断它们所在的内存位置。 从接下来的4个选项中选出最佳答案填入&#xff08;注&#xff1a;可重复选&#xff09;。 A、栈 B、堆 C、数…...

【Linux】网络原理

本篇博客让我们一起来了解一下网络的基本原理 1.网络发展背景 关于网络发展的历史背景这种东西就不多bb了&#xff0c;网上很容易就能找到参考资料&#xff0c;我的专业性欠缺&#xff0c;文章参考意义也不大。这里只做简单说明。 网络发展经过了如下几个模式 独立模式&…...

list模拟实现

list模拟实现list原理讲解节点结构list类设计push_backIterators:begin与endconst对象的迭代器重载->运算符反向迭代器迭代器所有代码迭代器总结constructor:clear~listfront与backinsert与erasesize与empty与swappop_back()总代码:节点类正向迭代器类反向迭代器类list类lis…...

CSS看这一篇就够啦,CSS基础大全,可用于快速回顾知识,面试首选

1 CSS简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。 CSS 是也是一种标记语言&#xff0c;主要用于设置 HTML 页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式、 边距等&#xff09;以及版面的布局和外观…...

Canvas详细使用方法(一)

Canvas Canvas的注意事项 < canvas > 和 < img > 元素很相像&#xff0c;唯一的不同就是它并没有 src 和 alt 属性。 -< canvas > 标签只有两个属性——width和height( 单位默认为px )。当没有设置宽度和高度时&#xff0c;canvas 会初始化宽为 300px 和高…...

CentOS定时任务——crontab

crontab Linux crontab 是用来定期执行程序的命令。 crond 命令每分钟会定期检查是否有要执行的工作&#xff0c;如果有要执行的工作便会自动执行该工作。 注意&#xff1a;新创建的 cron 任务&#xff0c;不会马上执行&#xff0c;至少要过 2 分钟后才可以&#xff0c;当然你…...

C51---蓝牙模块---连接软件---控制LED灯

1.器件&#xff1a;C51、HC-08蓝牙模块、Ty-C数据线、杜邦线 2.软件&#xff1a;HC蓝牙助手 3.接线&#xff1a;VCC-VCC、GND-GND、RXD-TXD、TXD-RXD 4.烧写&#xff1a;STC-ISP串口助手 5.代码&#xff1a; #include "reg52.h" #include "intrins.h" …...

Linux 学习笔记——二、主机规划与磁盘分区

一、Linux 与硬件的搭配 Linux 中所有设备均被视为文件&#xff0c;其命名规则如下&#xff1a; 设备文件名SCSI/SATA/USB 硬盘机/dev/sd[a-p]USB 闪存盘/dev/sd[a-p]&#xff08;与 SATA 相同&#xff09;Virtl/O 界面/dev/vd[a-p]&#xff08;用于虚拟机内&#xff09;软盘…...

麒麟服务器V10 版本 安装 Anaconda教程,也就是安装Python环境的教程(亲测有效)

目录1 Anaconda 是什么2 安装1 Anaconda 是什么 你可以理解为一个软件&#xff0c;和QQ一样的软件&#xff0c;你安装之后&#xff0c;里面就有naconda包括Conda、Python以及一大堆安装好的工具包&#xff0c;比如&#xff1a;numpy、pandas等 1&#xff09;包含conda&#x…...

【3维视觉】网格细分Mesh Subdivision算法介绍(Loop, Catmull-Clark, Doo-Sabin)

引言 介绍了Loop, Catmull-Clark, Doo-Sabin细分。 算法介绍 1. Loop细分 Loop细分是Charles Loop在1987年在硕士论文中提出的一种对三角网格的细分算法。 Loop细分是递归定义的&#xff0c;每一个三角形一分为四&#xff0c;对于新生成的点和旧点以不同的规则更新。 点的…...

自学大数据第六天~HDFS命令

HDFS常用命令 查看hadoop版本 version hadoop version注意,没有 ‘-’ [hadoopmaster ~]$ hadoop version Hadoop 3.3.4 Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb Compiled by stevel on 2022-07-29T12:3…...

maven仓库的配置

下载 官网下载&#xff1a;https://maven.apache.org/download.cgi 2. 配置maven环境 右键电脑 ->属性 -> 高级系统设置 -> 环境变量 -> 系统变量-新建 变量名&#xff1a;MAVEN_HOME 变量值为maven的文件安装地址 编辑Path系统变量 新建&#xff1a;%MAVE…...

医院信息管理云平台源码 云HIS系统源码 4级电子病历系统

基层医院云HIS系统源码 高端商业his源码 有演示&#xff0c;可直接项目运营。 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规…...

JS学习第9天——ES6中面向对象(类class、constructor构造函数、类的继承extends、super关键字、面向对象tab栏切换案例)

目录一、面向对象1、面向过程2、面向对象3、两者对比二、ES6中的类和对象1、面向对象的思维特点2、对象3、类class4、类constructor构造函数三、类的继承1、继承2、super()关键字3、注意点四、面向对象案例一、面向对象 两大编程思想&#xff1a;① 面向过程 ② 面向对象 1、…...

K8S核心秘术学习总纲

学习 Kubernetes (简称 K8S) 可以采取以下步骤&#xff1a; 了解 K8S 的基本知识&#xff1a;K8S 是一个负责管理容器的开源平台。 在学习 K8S 之前&#xff0c;需要先掌握 Linux 基础知识和 Docker 容器基础知识。 搭建 K8S 环境&#xff1a;为了学习 K8S&#xff0c;你需要有…...

【PTA-训练day27】L2-038 病毒溯源 + L2-039 清点代码库 + L2-040 哲哲打游戏

目录 L2-038 病毒溯源 - dfs求树最大深度及路径 L2-039 清点代码库 - STL嵌套使用结构体自定义排序 L2-040 哲哲打游戏 - vector建图 L2-038 病毒溯源 - dfs求树最大深度及路径 PTA | 程序设计类实验辅助教学平台 思路&#xff1a; 用链表建树 找到根节点dfs根节点寻找最大…...

新一代跨平台云备份工具Duplicacy

什么是 Duplicacy &#xff1f; Duplicacy 是一款云备份软件&#xff0c;通过 Duplicacy 可以将视频&#xff0c;图片&#xff0c;文件&#xff0c;注册表等数据备份到云端。Duplicacy 通过客户端加密和最高级别的重复数据删除功能&#xff0c;将您的文件备份到许多云存储。 安…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...