【C语言进阶】动态内存管理的面试题||练习

本节内容专门整理了一些动态内存管理的面试题,配有详细的解答。

目录

1. 看代码说结果

2. 看代码说结果

3. 看代码说结果

4.小乐乐与欧几里得 

描述

分析1:

分析2:

代码:

5. 空心正方形

分析:

1. 看代码说结果

#define _CRT_SECURE_NO_WARNINGS
#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;
}

        这里会报错,这是常见的野指针错误;首先调用Test函数再调用GetMemory函数,然后将字符串赋给p数组,执行完毕后p所指向的区域会进行销毁,但是返回了p的地址,对野指针进行解引用一定会出错。

        这里举一个例子,涉及到函数栈帧的知识点,之后会单独做一期来进行讲解函数栈帧。

        正常情况下这里的p是一个野指针,这是因为p指向的空间已经被回收了,这时候调用printf,就会创建一个函数栈帧在main函数之上,在原来已经被销毁的test函数的位置,所以在test的内部的变量a一定会被覆盖,最后会打印出其他值;

        如果没有hehe的输出,这里在内存没有被覆盖的情况下有几率会打印出10。

2. 看代码说结果

         这段代码可以正常输出hello,存在一个问题就是没有手动释放内存空间,需要在输出之后加上:

free(str);
str = NULL;

3. 看代码说结果

         str并没有置为空,所以这是一个野指针的问题,这段代码将已经回收的内存重新覆盖新的值,这属于非法访问已经释放的内存,所以虽然可以打印world,但是逻辑上是不允许的。

        需要再free的后面加上:

str = NULL;

        下面给一段代码,来根据代码了解内存区域:

        首先全局变量和静态变量存放在数据段(全局区)之中;

        局部变量是存放在栈区中;

        字符串常量存放在代码段(常量区)中;

        使用malloc开辟的空间是在堆区中;

4.小乐乐与欧几里得 

描述

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述:

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

输出描述:

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

示例1

输入:

10 20

输出:

30

分析1:

        最大公约数:可以从这两个数中的较小值出发,逐步递减;

        最小公倍数:可以从这两个数中的较大值出发,逐步递增。

分析2:

        上面的方法整体效率太低了,我们开始想想另外一个办法 :辗转相除法。

n % m 余数若不为0,那么r赋给m,m赋给n,继续相余,如果得数是0,此时我们的最大公约数就是m。

        此时最小公倍数是(n * m) / 最大公约数。

这里需要注意的是数字的范围,所以可以给定长整型。

代码:

#include <stdio.h>
/*
思路:
1、使用辗转相除法求出最大公约数。
2、两个数相乘再除以最大公约数就是最小公倍数。
3、输出记得使用长整型。*/
int main() {long n = 0,m = 0;while( scanf("%ld %ld",&n,&m) == 2){long i = n;long j = m;long r = 0;// 计算最大公约数while(r = i % j){i = j;j = r; }// 跳出循环j就是最大公约数// 计算最小公倍数r = (m * n) / j;printf("%ld\n", r + j);}return 0;
}

5. 空心正方形

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

示例1

输入

4

输出

* * * * 
*     * 
*     * 
* * * * 

分析:

        我们可以先按照打印二维数组打印“* ”,这样我们会得到一个正方形,当我们需要空心的时候,只需要判断当行数为0或者为总行数-1的时候 或者 列数为0或者总列(行)数-1的时候打印* ,其余时候打印两个空格即可。

#include <stdio.h>int main() {int a = 0;while(scanf("%d", &a) == 1){int i = 0;for (i = 0; i < a; i++) {int j = 0;for (j = 0; j < a; j++) {if (i == 0 || i == (a-1) ||j == 0 || j == (a-1) ) {printf("* ");}else{printf("  ");}}printf("\n");}}return 0;
}

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

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

相关文章

【图论】倍增与lca

void dfs(long u,long father){ dep[u]dep[father]1;//只在这里初始化depfor(long i1;(1<<i)<dep[u];i)fa[u][i]fa[fa[u][i-1]][i-1];//只这里用的倍增for(long ihead[u];~i;iedge[i].next){long vedge[i].to;if(vfather)continue;fa[v][0]u;dfs(v,u); }} long lca(lo…

VS Code 美化插件

目录1. Better Comments 更好的注释2. indent-rainbow 彩虹的缩进3. Trailing Spaces 尾随的空格4. Gruvbox Material 护眼的材质5. Md Editor 博客编辑器6. 待补充推荐笔记&#xff1a;VS Code写代码必备的五款代码美化插件 1. Better Comments 更好的注释 Better Comments Be…

火语言 RPA 在日常运维中的实践

在系统运维和技术支持工作中&#xff0c;总有一些操作像 “固定程序” 一样循环往复&#xff1a;定期检查服务器状态、批量处理用户权限申请、手动清理系统日志…… 这些工作步骤固定、逻辑简单&#xff0c;却占用了大量本可用于故障排查和系统优化的时间。近期在优化运维团队的…

FOUPK3system5XOS系统 NTX V2.0发布通知

FOUPK3system5XOS系统NTX V2.0发布通知更新1.系统安全&#xff1a;使用FOUPK3system5XOS NOS X9新内核与FOUPK3system5XOS系统19.63正式版一样提供更好的安全性2.原生应用&#xff1a;启用FOUPK3system5XOS ONS X9 API 72服务FOUPK3system5XOS系统 NTX V2.0用户支持使用FOUPK3…

爬虫算法原理解析

文章目录 核心算法原理 1. 图遍历算法 广度优先搜索(BFS) 深度优先搜索(DFS) 2. URL调度算法 优先级队列调度 3. 页面去重算法 基于哈希的去重 基于布隆过滤器的去重 4. 链接提取与规范化 5. 抓取频率控制算法 6. 增量爬取算法 高级算法策略 1. PageRank算法在爬虫中的应用 2. …

探索双链表:C语言中的链式结构魔法

目录 引言 一、双链表基础 1.1、什么是双链表&#xff1f; 1.2、双链表节点的结构定义 二、双链表的基本操作 2.1、双链表的初始化 2.2、尾插法 2.3、头插 2.4、判断双链表是否为空 2.5、尾删法 2.6、头删法 2.7、查找 2.8、双链表在指定位置之前插入 2.9、双链表…

HTML5 + CSS3模拟西门庆、武大郎和潘金莲的精彩520微信聊天,看完我又相信爱情了

今天520了&#xff0c;我用HTML5 CSS3模拟了西门庆、武大郎和潘金莲的精彩微信聊天&#xff0c;希望你看完以后可以在紧张的工作中&#xff0c;放松一下&#xff0c;开心一下&#xff0c;同时祝你在这个520可以过得开心快乐。 目录 1 实现思路 1.1 聊天实现素材 1.2 HTML布…

【Linux】Linux了解与基本指令(1)

hello~ 很高兴见到大家! 这次带来的是C中关于Linux基本指令这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙 文章目录一、认识Linux二、操作系统&#xff08;OS&#xff09;三、基本指令1. 目录与普通文件1.1 目录1.2 普通文件2. pwd 与…

dify 学习笔记

目录 启动项目 浏览器访问&#xff1a; dify删除工作流 代码是开源dify 启动项目 cd E:\project\qwen\dify-main\docker docker compose up -d 浏览器访问&#xff1a; http://127.0.0.1/apps dify删除工作流 右下角&#xff0c;三个点&#xff0c;点击弹出框&#xff0…

【YOLOv8改进 - 特征融合】FCM:特征互补映射模块 ,通过融合丰富语义信息与精确空间位置信息,增强深度网络中小目标特征匹配能力

YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏 介绍 摘要 文…

算法训练营day30 贪心算法④ 重叠问题 452. 用最少数量的箭引爆气球、435. 无重叠区间 、 763.划分字母区间

贪心算法的第四篇博客&#xff0c;主要是重叠问题的练习&#xff0c;思路都较为简单&#xff0c;最后一题可能需要着重思考一下 452. 用最少数量的箭引爆气球 遍历数组&#xff0c;如果存在重叠则减少一支箭&#xff08;不重叠则增加一支箭&#xff09; 重叠的判定&#xff1a…

Gradio, Streamlit, Dash:AI应用开发的效率之选

在人工智能时代&#xff0c;如何快速将模型原型转化为交互式应用&#xff0c;是许多开发者面临的挑战。Gradio、Streamlit 和 Dash 作为流行的Python框架&#xff0c;各自以其独特的优势&#xff0c;帮助我们高效地构建AI应用界面。本文将深入对比这三大框架的优缺点、适用场景…

数学基础弱能学好大数据技术吗?

很多同学刚进入大学&#xff0c;一听到“大数据”“数据分析”这些词&#xff0c;就觉得必须得是数学大佬才能玩得转。高数线代概率论&#xff0c;光听名字就头大&#xff0c;更别说那些复杂的公式和推导了。但事实真的是这样吗&#xff1f;数学不好&#xff0c;就不能学大数据…

子进程信号处理

SIGCHLD 信号详解‌‌一、信号定义与作用‌‌SIGCHLD‌ 是 UNIX/Linux 系统中由内核向父进程发送的信号&#xff0c;用于通知子进程的状态变化&#xff08;如终止、停止或恢复&#xff09;‌。其主要作用包括&#xff1a;‌回收子进程资源‌&#xff1a;避免子进程终止后成为僵…

WPF 项目设置应用程序图标和设置程序集图标

在 WPF 项目中更改生成的可执行文件&#xff08;.exe&#xff09;图标需要完成两个关键步骤&#xff1a;设置应用程序图标和设置程序集图标。以下是详细操作指南&#xff1a; 第一步&#xff1a;准备图标文件 准备一个 .ico 格式的图标文件&#xff08;必须使用 ICO 格式&…

JMeter压测黑马点评优惠券秒杀的配置及请求爆红问题的解决(详细图解)

目录 一、前言 二、优惠券秒杀压测配置 三、已配置token但是请求全部爆红的问题 四、配置JSON断言后的效果 一、前言 在学习黑马点评优惠券秒杀功能的压力测试时&#xff0c;由于老师没有任何引导而是直接开始测试&#xff0c;所以本博客记录一下JMeter压测黑马点评优惠券秒…

Nginx 运维实战: 什么是反向代理,如何配置?

在互联网的庞大架构中&#xff0c;Nginx 作为一款高性能的 Web 服务器和反向代理服务器&#xff0c;发挥着至关重要的作用。其中&#xff0c;反向代理功能更是 Nginx 被广泛应用的核心原因之一。本文将深入探讨什么是反向代理&#xff0c;以及如何在 Nginx 中进行反向代理的配置…

短视第三套多功能主题3.0二开模板苹果CMS插件重构版

这款短视第三套多功能主题二开模板苹果CMS插件重构版源码&#xff0c;基于市面上现有的二开版本进行的重制修正更新。目前已经完美适配新版 4049 以上的苹果Cms系统&#xff0c;无需担心因系统版本问题导致的不兼容情况。​主题插件重构后支持一键启动插件自动安装模板&#xf…

详解力扣高频SQL50题之1148. 文章浏览 I【入门】

传送门&#xff1a;1148. 文章浏览 I 题目 Views 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | article_id | int | | author_id | int | | viewer_id | int | | view_date | date | ---------------------- 此表可能会存在重复…

内外网互传文件 安全、可控、便捷的跨网数据交换

内外网互传文件 安全、可控、便捷的跨网数据交换破解企业数字化痛点&#xff0c;重新定义文件传输标准在数字化转型浪潮中&#xff0c;企业面临着前所未有的挑战&#xff1a;内网系统需要严密防护&#xff0c;外网协作又要高效便民。如何在网络安全与业务效率之间找到完美平衡&…