嵌入式笔试面试刷题(day11)

news2025/7/19 9:12:45

文章目录

  • 前言
  • 一、字节流,数据报,报文
  • 二、makefile怎么引入库和模块
  • 三、多次free一块内存空间会怎么样
  • 四、字符操作函数越界会发生什么
  • 五、QT中一个信号可以连接多个槽函数吗
  • 六、QT中一个槽函数可以对应多个信号吗
  • 总结


前言

本篇文章继续刷题。

一、字节流,数据报,报文

1.数据报(Datagram):数据报是一种独立的、特定大小的消息单元,在网络通信中作为传输的基本单位。每个数据报都是独立的,具有消息边界和完整性。它包含了必要的标识信息,如源地址、目标地址、报文长度等,并且可以根据不同的网络协议进行封装。数据报通常通过面向数据报的协议(如UDP)进行传输。

2.字节流(Byte Stream):字节流是一连串连续的字节数据流,在网络通信中作为传输的基本单位。字节流没有消息的边界和结构概念,它被视为连续的字节序列进行传输。字节流通常通过面向字节流的协议(如TCP)进行传输。在字节流传输中,数据被分割成较小的数据段(数据包)进行传输,接收方需要根据应用协议对字节流进行解析和处理,以还原原始的数据格式和含义。

3.报文(Message):报文是在网络通信中传输的具有结构和语义的数据单元。报文由报头和报体组成,报头包含了元数据信息,报体包含了应用层的具体数据内容。报文的结构可以是预定义的、固定的,或者根据应用程序需要动态确定。报文可以通过数据报或字节流进行传输,具体取决于所选择的网络协议和传输方式。

主要区别如下:

1.数据报是独立的、具有消息边界和完整性;字节流是连续的、没有明确消息边界的字节序列。

2.数据报通过面向数据报的协议(如UDP)进行传输;字节流通过面向字节流的协议(如TCP)进行传输。

3.报文是具有结构和语义的数据单元,可以以数据报或字节流的形式进行传输。

二、makefile怎么引入库和模块

引入库:

在Makefile中添加库的链接指令:在Makefile文件中的目标依赖规则中,使用-l参数指定库的名称,例如-lmylib,其中mylib是要引入的库的名称。
指定库的搜索路径:如果库文件不在默认的搜索路径中(如/usr/lib),可以使用-L参数指定库文件的路径,例如-L/path/to/mylib,其中/path/to/mylib是库文件的路径。

引入模块/头文件:

在源文件中使用#include指令引入头文件:在需要使用某个模块的源文件中,使用#include指令将对应的模块的头文件包含进来,以便在源文件中使用其中定义的函数、变量等。

三、多次free一块内存空间会怎么样

1.未定义行为(Undefined Behavior):根据C和C++的语言标准,对同一块内存空间进行多次释放操作是未定义行为。这意味着编译器、运行时系统或操作系统可以以任意的方式处理这种情况,包括崩溃、程序异常终止、数据损坏等。

2.可能引发内存错误:多次释放同一块内存可能导致内存错误。当第一次释放后,该内存空间被标记为不可用,再次释放时系统可能无法正确管理该内存,可能会引发内存访问错误或者损坏其他数据结构。

3.内存泄漏:多次释放同一块内存可能导致内存泄漏。在第一次释放后,如果没有显式地将指针设置为NULL或重新分配其他内存,则无法再次使用该指针来分配内存或者判断该内存是否已经被释放,从而造成内存泄漏。

4.程序异常或崩溃:重复释放同一块内存可能导致程序异常或崩溃。这是因为操作系统或运行时系统可能会在发现无效释放操作时终止程序的执行,以保护系统和其他进程不受到影响。

代码测试:

#include <stdio.h>
#include <malloc.h>


int main(void)
{
    int* p = (int*)malloc(20);

    free(p);
    free(p);

    return 0;
}


运行结果:
在这里插入图片描述
这里可以发现会导致程序直接出现异常崩溃。

四、字符操作函数越界会发生什么

1.缓冲区溢出:越界访问可能导致缓冲区溢出。例如,strcpy函数会将源字符串的内容复制到目标字符串缓冲区,如果源字符串的长度超过目标缓冲区的大小,就会发生缓冲区溢出,导致目标缓冲区以及相邻内存区域被覆写。

2.内存损坏:越界访问可能导致内存损坏。如果访问超过分配给目标缓冲区的内存范围,可能会修改那些不属于目标缓冲区的内存单元。这可能会破坏其他变量、数据结构或者函数指针,导致程序运行异常或崩溃。

3.安全漏洞:越界访问可能引发安全漏洞,例如缓冲区溢出攻击。恶意用户可以利用越界访问来覆盖程序的控制流,从而实现远程代码执行、拒绝服务等攻击。

为避免这些问题,应该始终确保字符操作函数的输入参数符合预期,遵循正确的使用方式:

1.确保目标缓冲区足够大,能够容纳源字符串的全部内容,并考虑字符串结束标志符(‘\0’)的大小。

2.使用安全版本的字符操作函数,如strncpy代替strcpy,它可以指定复制的最大长度,避免超出目标缓冲区范围。

3.仔细检查输入参数的有效性,确保源字符串和目标缓冲区的长度符合预期,避免潜在的越界访问。

测试代码:

#include <stdio.h>
#include <string.h>


int main(void)
{
    char str[5];

    strcpy(str, "Hello World");
    

    return 0;
}


运行效果:
在这里插入图片描述

五、QT中一个信号可以连接多个槽函数吗

Qt中一个信号可以连接多个槽函数。在Qt中,使用信号(Signal)和槽(Slot)机制来实现对象间的通信。一个信号可以连接到多个槽函数,当信号被触发时,所有连接的槽函数都会被调用。

可以使用QObject::connect()函数将信号和槽函数连接起来。connect()函数接受两个参数:发送信号的对象和接收信号的对象。可以使用该函数来连接一个信号到一个槽函数,或者连接一个信号到多个槽函数。

以下是一个连接单个信号到多个槽函数的示例:

QObject::connect(sender, &Sender::mySignal, receiver1, &Receiver1::mySlot);
QObject::connect(sender, &Sender::mySignal, receiver2, &Receiver2::mySlot);

在上述示例中,Sender对象的mySignal信号被连接到两个不同的接收者对象(receiver1和receiver2)的槽函数(Receiver1::mySlot和Receiver2::mySlot)。当Sender对象触发mySignal信号时,两个槽函数都会被调用。

通过连接一个信号到多个槽函数,可以实现更灵活的信号处理和对象间的通信。这种方式经常用于实现观察者模式或处理同一事件的多个不同逻辑。

六、QT中一个槽函数可以对应多个信号吗

在Qt中一个槽函数可以对应多个信号。Qt的槽函数是普通的成员函数,可以被多个信号连接到同一个槽函数上。

使用QObject::connect()函数可以将多个信号连接到同一个槽函数上。以下是一个示例:

QObject::connect(sender1, &Sender1::mySignal, receiver, &Receiver::mySlot);
QObject::connect(sender2, &Sender2::anotherSignal, receiver, &Receiver::mySlot);

在上述示例中,Receiver对象的mySlot槽函数被连接到两个不同的发送者对象(sender1和sender2)的信号(mySignal和anotherSignal)。当任何一个发送者对象触发其对应的信号时,都会触发Receiver对象的mySlot槽函数。

这种方式可以用于实现对相似的事件或信号进行相同的响应逻辑,将多个信号连接到同一个槽函数使得代码更加简洁和可维护。

需要注意的是,当一个槽函数连接到多个信号时,如果信号的参数类型不同,或者信号的参数顺序不同,需要确保槽函数能够正确处理这些参数,否则可能导致运行时错误或逻辑问题。

总结

本篇文章就讲解到这里。

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

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

相关文章

系统架构设计师---计算机基础知识之存储管理

存储管理的主要任务&#xff1a;提高主存的利用率、扩充主存以及对主存信息实现有效保护。 存储管理的对象&#xff1a;主存储器(简称主存或内存)。 逻辑地址和物理地址&#xff1a;用户编程所用的地址称为逻辑地址(虚地址)&#xff0c;而实际的内存地址 则称为物理地址(实地…

【组合数学】CF1622 D

Problem - 1622D - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始的思路&#xff1a; 事实上&#xff0c;观察样例可知&#xff0c;如果一个小区间被包含在大区间里面&#xff0c;那么我们需要计算的是大区间的贡献 所以只需要找出大区间即可 一开始想的是找出所有…

C语言案例 判断是否为回文数-06.1

题目&#xff1a;随机输入一个5位数&#xff0c;判断它是不是回文数 步骤一&#xff1a;定义程序的目标 编写C程序&#xff0c;随机输入一个5位数&#xff0c;判断它是不是回文数 步骤二&#xff1a;程序设计 原理&#xff1a;即12321是回文数&#xff0c;个位与万位相同&#…

剑指Offer68-II.二叉树的最近公共祖先 C++

1、题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

前端开发,怎么解决浏览器兼容性问题? - 易智编译EaseEditing

解决浏览器兼容性问题是前端开发中常见的挑战之一。不同的浏览器可能对网页元素的渲染和功能支持有所不同&#xff0c;因此需要采取一些策略来确保您的网页在不同浏览器上都能正常运行和呈现。以下是一些解决浏览器兼容性问题的方法和策略&#xff1a; 使用CSS Reset&#xff…

(三)行为模式:2、命令模式(Command Pattern)(C++示例)

目录 1、命令模式&#xff08;Command Pattern&#xff09;含义 2、命令模式的UML图学习 3、命令模式的应用场景 4、命令模式的优缺点 5、C实现命令模式的实例 1、命令模式&#xff08;Command Pattern&#xff09;含义 命令模式&#xff08;Command&#xff09;&#xff…

土地利用变化碳排放效应的遥感监测、生态系统碳库的遥感估算、收支的遥感模拟、能源消耗碳排放空间格局模拟

以全球变暖为主要特征的气候变化已成为全球性环境问题&#xff0c;对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…

UI界面设置

文章目录 1. 修改 share.html 内容如下&#xff1a;2. 修改 html 文件格式为 utf-83.保存&#xff0c;运行程序4. 访问页面 1. 修改 share.html 内容如下&#xff1a; <!DOCTYPE html><html> <head><meta charset"utf-8"><title>1v1屏…

创建和使用角色

创建和使用角色 根据下列要求&#xff0c;在 /home/curtis/ansible/roles 中创建名为 apache 的角色&#xff1a; httpd 软件包已安装&#xff0c;设为在系统启动时启用并启动 防火墙已启用并正在运行&#xff0c;并使用允许访问 Web 服务器的规则 模板文件 index.html.j2 已存…

【ROS】服务通信--从理论介绍到模型实现

一、概念介绍 服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求&#xff0c;B接收处理请求并产生响应结果返回给A。 一个节点需要向相机节点发送拍照请求&#xff0c;相机…

关于STM32Cube的HAL库使用RTOS设置且给芯片下载的注意事项

学了标准库和RTOS之后&#xff0c;发现HAL库开发比较快&#xff0c;于是尝试使用HAL库开发ROTS程序&#xff0c; 第一次下载程序到芯片发现程序是运行了&#xff0c;但是不能再次下载程序&#xff08;也就是不能检测到ST-link或者DIP等接口&#xff09; 于是根据BOOT0和BOOT1…

璞睿互联教师评价系统 | 助推教师评价改革,促进教学智能化发展!

近年来&#xff0c;随着信息技术的不断发展&#xff0c;教育评价面临了一系列挑战。主要表现在教学评价空间的广泛场景化、教学评价内容的多元化以及教学评价方式的智能化。为了应对这些挑战并满足新时代教育评价改革的需求&#xff0c;璞睿互联积极探索实现教师评价智能化的途…

Fedora38下中文输入法,与切换问题

前言 首先&#xff0c;由于本人先前一直用Ununtu&#xff0c;下意识会安装googlepinyin,但是在Fedpra上其实根本没有必要这样做&#xff0c;他是支持汉语输入&#xff0c;而且做得更好。 一、安装汉语键盘输入 1、点击setting(设置) 2、找到keyboard(键盘)、Input Sourses(点…

C#__基本特性和使用

// 特性&#xff08;attribute&#xff09;: // 一种允许我们向程序集添加元数据的语言结构 // 用于保存程序结构信息的某种特殊类型的类 // 类似“批注”&#xff0c;用于解释说明 #define IsShowMessage // 宏定义&#xff0c;在开头定义&#xff0…

Python面向对象植物大战僵尸

先来一波效果图 来看看如何设计游戏架构 import sysimport pygameclass BaseSprite(pygame.sprite.Sprite):def __init__(self, name):super().__init__()self.image pygame.image.load(name)self.rect self.image.get_rect()class AnimateSprite(BaseSprite):def __init__(…

ARM体系结构学习笔记:PC寄存器

PC寄存器 32位thumb也是采用三级流水线结构,但是每个指令位2个字节因此4thumb模式读PC寄存器 mov r0, pc ; thumb mode r0 pc 4LDR R1, (aLd - 0xAC3B62C) ADD R1, PC ; "%ld\n"thumb模式使用LDR使用PC进行间接寻址 如…

jvs-logic(逻辑引擎)的产生背景和使用场景作用

逻辑引擎的由来 要了解逻辑引擎的产生背景&#xff0c;我们需要了解程序执行的基本原理&#xff0c;那么编译是少不了的&#xff0c;编译是将高级语言翻译成为机器可以执行的机器语言 。我们在做日常开发过程中&#xff0c;把通用的业务逻辑通过高级语言写出来后&#xff0c;需…

2022年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;数组逆序重放 将一个数组中的值按逆序重新存放。例如&#xff0c;原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。 输入 输入为两行&#xff1a;第一行数组中元素的个数n(1 输出 输出为一行&#xff1a;输出逆序后数组的整数&#xff0c;每两个整数之间用空格分隔…

87-基于stm32单片机粮仓仓库环境温湿度烟雾监测报警系统Proteus仿真+源码

资料编号&#xff1a;087 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏烟雾浓度检测DHT11温湿度电机按键蜂鸣器&#xff0c;制作一个温湿度采集、烟雾浓度采集&#xff0c;OLED显示相关数据&#xff0c; 2、通过按键设置温度上限、烟雾浓度上限&#xff0…

逻辑漏洞合集

0x01 未授权 未授权问题为普通用户登录或没有登录后&#xff0c;拼接js接口&#xff0c;构造报文&#xff0c;越权实现管理员的权限操作。原因&#xff1a;后端没有校验Cookie/Session的身份信息&#xff0c;以至于普通用户的权限可以实现管理员权限的功能。 First webpack打…