嵌入式面试常见问题(一)

目录

1.什么情况下会出现段错误?

2.swap() 函数为什么不能交换两个变量的值 

3.一个函数有六个参数 分别放在哪个区?

4.定义一个变量,赋初值和不赋初值分别保存在哪个区?

5.linux查看端口状态的命令 

6.结构体中->和.的区别 


1.什么情况下会出现段错误?

答:一种可能是栈溢出

        在Linux环境下,每一个用户进程默认有8MB大小的栈空间,如果你在函数内定义大容量的数组或局部变量,就可能造成栈溢出,也会引发一个段错误。内核中的线程也是如此,每一个内核线程只有8KB的内核栈,在实际使用中也要非常小心,防止堆栈溢出

比如查看当前栈的大小,为8M

运行代码如下:

#include<stdio.h>
int main()
{char buf[8*1024*1024];printf("hello world!\n");return 0;
}

运行后就会出现如下错误

将栈的大小设置为10M就可以正常输出:

linux进程栈大小最好不要设置为无限大,不然数据不安全

定义大的buf不建议使用数组,一般使用堆区 ,比如malloc

第二种是因为递归

第三种是空指针解引用、数组越界访问、使用已释放的内存

发生段错误的根本原因在于非法访问内存,即访问了权限未许可的内存空间

2.swap() 函数为什么不能交换两个变量的值 

        形参只有在函数被调用时才会在函数栈帧内分配存储单元,用来接收传进来的实参值。函数运行结束后,形参单元随着栈帧的销毁而被释放。变量作为实参传递时,只是将其值复制到形参的存储空间,在函数运行期间,改变形参的值并不会改变原来实参的值,因为两者存储在栈中不同的内存单元上

3.一个函数有六个参数 分别放在哪个区?

        在函数调用过程中,当要传递的参数个数小于4时,直接使用R0~R3寄存器传递即可;当要传递的参数个数大于4时,前4个参数使用寄存器传递,剩余的参数则压入堆栈保存。

        ·在上面的程序中,main()函数调用了f()函数,并传过去6个实参求和。根据ATPCS规则,除了前4个参数使用寄存器R0~R3传递剩下的2个参数要通过压栈来传递。在参数传递过程中,各个参数压栈、出栈的顺序也要有一个约定,如上面的6个参数,是从右往左依次压入堆栈 。

4.定义一个变量,赋初值和不赋初值分别保存在哪个区?

在C语言中,全局变量的存储方式取决于是否给变量赋予了初始值。

  1. 全局变量有初始值

    • 如果全局变量有初始值,它将保存在数据段(Data Segment)中的已初始化数据区(Initialized Data Segment)。
    • 初始化的全局变量在程序执行之前就会被分配内存,并且初始值会在程序加载时被复制到数据段中。
  2. 全局变量无初始值

    • 如果全局变量没有初始值,它将保存在数据段中的未初始化数据区(Uninitialized Data Segment),也被称为BSS段(Block Started by Symbol)。
    • 未初始化的全局变量在程序加载时会被分配内存,但是内存中的值是未定义的通常是0或者是垃圾值)。

5.linux查看端口状态的命令 

在Linux系统中,可以使用以下命令来查看端口状态:

  1. netstat命令:

    netstat -tuln
    

    该命令用于显示当前系统的网络连接、监听端口和网络统计信息。参数说明:

    • -t:显示TCP协议相关的连接和监听端口。
    • -u:显示UDP协议相关的连接和监听端口。
    • -l:仅显示监听状态的端口。
    • -n:以数字形式显示端口和IP地址,而不进行域名解析。
  2. ss命令:

    ss -tuln
    

    该命令也用于显示当前系统的网络连接、监听端口和网络统计信息。参数说明:

    • -t:显示TCP协议相关的连接和监听端口。
    • -u:显示UDP协议相关的连接和监听端口。
    • -l:仅显示监听状态的端口。
    • -n:以数字形式显示端口和IP地址,而不进行域名解析。

这些命令会列出当前系统上正在监听的端口以及与其他主机建立的连接。可以根据需要选择合适的命令,并结合其他参数进行进一步筛选和过滤。

6.结构体中->和.的区别 

在C语言中,结构体(struct)是一种自定义的数据类型,用于组合多个不同类型的变量成为一个单独的实体。当我们定义一个结构体变量后,可以使用两种不同的运算符来访问结构体成员,即->.

  1. -> 运算符:

    • -> 运算符用于访问指向结构体的指针所指向的成员。
    • 当我们有一个指向结构体的指针时,可以使用 -> 运算符来访问结构体成员。
    • 语法:指针变量->成员名
    • 示例:
      struct Person {char name[20];int age;
      };struct Person p;
      struct Person *ptr = &p;ptr->age = 25;  // 使用->访问指针所指向的结构体成员
      
  2. . 运算符:

    • . 运算符用于访问结构体变量的成员。
    • 当我们有一个结构体变量时,可以使用 . 运算符来访问结构体成员。
    • 语法:结构体变量.成员名
    • 示例:
      struct Person {char name[20];int age;
      };struct Person p;p.age = 25;  // 使用.访问结构体变量的成员
      

总结:

  • -> 运算符用于访问指向结构体的指针所指向的成员。
  • . 运算符用于访问结构体变量的成员。
  • 使用 -> 运算符时,操作数必须是指向结构体的指针。
  • 使用 . 运算符时,操作数必须是结构体变量本身。

需要注意的是,如果结构体变量是通过动态内存分配(如使用malloc函数)获得的,那么我们需要使用 -> 运算符来访问结构体的成员。而如果结构体变量是在栈上声明的,那么我们可以使用 . 运算符或 -> 运算符来访问结构体的成员,具体取决于我们使用的是结构体变量还是指向结构体的指针。

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

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

相关文章

Tomcat自启动另一种方法

Tomcat自启动另一种方法 问题&#xff1a; 不知道怎么回事&#xff0c;好几台电脑都可以开机自启动tomcat&#xff0c;正常运行项目。一样的配置一样的操作流程&#xff0c;偏偏要运行的机器开机自启动后&#xff0c;项目不能运行&#xff0c;手动重启tomcat又可以用了。网上…

FHRP首跳冗余的解析

首跳冗余的解析 个人简介 HSRP hot standby router protocol 热备份路由协议 思科设备上 HSRP VRRP 华为设备上 VRRP HSRP v1 version 1 HSRP v2 version 2 虚拟一个HSRP虚拟IP地址 192.168.1.1 开启HSRP的抢占功能 通过其他参数 人为调整谁是主 谁是从 &a…

【低代码表单设计器】:创造高效率的流程化办公!

当前&#xff0c;有不少用户朋友对低代码表单设计器挺感兴趣。其实&#xff0c;如果想要实现提质增效的办公效率&#xff0c;创造一个流程化办公&#xff0c;那么确实可以了解低代码技术平台。流辰信息作为服务商&#xff0c;拥有较强的自主研发能力&#xff0c;根据市场的变化…

Maven安装

Maven安装 1、Linux下Maven安装 1.1 下载安装包 maven 官网地址&#xff1a;https://maven.apache.org/download.cgi 安装包下载地址&#xff1a;https://dlcdn.apache.org/maven/maven-3 这里下载 apache-maven-3.3.9-bin.tar.gz 下载后上传到Linux服务器 1.2 安装Mave…

如何不引入第三个中间变量进行两数交换

但在大厂面试中&#xff0c;有一道非常经典的数字交换题目&#xff1a;如何在不引入第三个中间变量的情况下&#xff0c;完成两个数字的交换。 这里可以用到一个数学上的技巧&#xff1a; a a b; b a - b; a a - b; 除了这种先加后减的写法&#xff0c;还有一种先减后加的…

Mybatis入门

Mybatis mybatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。&#xff08;控制层 controller&#xff09;&#xff08;业务层service&#xff09;&#xff08;持久层dao&#xff09;&#xff08;数据库&#xff09; 快速创建springboot-mybatis工程 jdk选11 &am…

MAC m系列docker login报错

错误&#xff1a;ERROR: failed to solve: XXX error getting credentials - err: exit status 1, out: 解决&#xff1a; vi ~/.docker/config.jsonzsxzsx [15时55分55秒] [~] { {"auths": {"harbor-g42c.corp.matrx.team": {"auth": "…

RK平台使用MP4视频做开机动画以及卡顿问题

rk平台android11以后系统都可以使用MP4格式的视频做开机动画,系统源码里面默认使用的是ts格式的视频,其实使用mp4的视频也是可以的。具体修改如下: diff --git a/frameworks/base/cmds/bootanimation/BootAnimation.cpp b/frameworks/base/cmds/bootanimation/BootAnimat…

android Selinux 之 platform

概念&#xff1a; 平台签名&#xff1a;Android.mk 中&#xff0c;定义 LOCAL_CERTIFICATE : platform system权限&#xff1a;AndroidManifest.xml 中声明 android:sharedUserId"android.uid.system" &#xff0c;同时是平台签名 分类&#xff1a; untrusted_…

ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“

现象&#xff1a; ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“ 尝试查找原因&#xff1a;打开从windos直接粘贴c程序到ubuntu的c代码&#xff0c;发现多了 <200b>&#xff1a; 方案&#xff1a;尝试在vim编辑器删除&#xff0c;多出来的字符后编译…

ARM 按键控制 LED灯,蜂鸣器,风扇

main.c: #include "uart.h" #include "key_it.h" int main() {all_led_init();uart4_init();//串口初始化//中断初始化key_it_config();key3_it_config();buzzer_init();fan_init();while(1){//保证主程序不结束}return 0; }src/key_it.c: #include"…

Java 使用 Easyexcel 导出大量数据

读Excel | Easy Excel 1、 我遇到的数据量超级大&#xff0c;使用传统的POI方式来完成导入导出很明显会内存溢出&#xff0c;并且效率会非常低&#xff1b;2、 数据量大直接使用select * from tableName肯定不行&#xff0c;一下子查出来300w条数据肯定会很慢&#xff1b;3、 …

昇腾910使用记录

一. 压缩文件和解压文件 1. 压缩文件 tar -czvf UNITE-main.tar.gz ./UNITE-main/2. 解压文件 tar -xvf ./UNITE-main/二. CUDA更改为NPU data[label] data[label].cuda() data[instance] data[instance].cuda() data[image] data[image].cuda()更改为 data[label] da…

小程序中使用echarts的相关配置以及折线图案例(简单易懂)

第一步&#xff1a;引入echarts文件--此文件需要下载&#xff1a; 下载地址&#xff1a;点击此处进行下载echarts文件 点击Download ZIP下载压缩包&#xff0c;注意&#xff1a;e-canvas是我从完整的文件中剥离出来的有用的&#xff0c;不会影响项目。 第二步&#xff1a;把整…

ctfshow萌新计划web9-14(正则匹配绕过)

目录 web9 web10 web11 web12 web13 web14 web9 审一下代码&#xff0c;需要匹配到system|exec|highlight才会执行eval函数 先看一下当前目录下有什么 payload&#xff1a;?csystem(ls); index.php是首页&#xff0c;我们看看config.php payload&#xff1a;?csystem…

nodejs+vue+elementui医院挂号预约管理系统4n9w0

前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn install Express 框架于Node运行环境的Web框架, 开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff…

邮政编码,格式校验:@ZipCode(自定义注解)

目标 自定义一个用于校验邮政编码格式的注解ZipCode&#xff0c;能够和现有的 Validation 兼容&#xff0c;使用方式和其他校验注解保持一致&#xff08;使用 Valid 注解接口参数&#xff09;。 校验逻辑 有效格式 不能包含空格&#xff1b;应为6位数字&#xff1b; 不校验…

AI「鸟口普查」,康奈尔大学利用深度学习分析北美林莺分布

据世界自然基金会统计&#xff0c;1970-2016 年&#xff0c;全球代表物种种群数量减少了 68%&#xff0c;生物多样性不断下降。 保护生物多样性&#xff0c;需要对当地生态情况进行准确分析&#xff0c;制定合理的生态保护政策。然而&#xff0c;生态数据太过庞杂&#xff0c;统…

瀑布流布局(CSS flex实现)

关键点 使用了 vw 进行自适应缩放html: <div class="container"><div class="queue"><div

小程序中如何设置所服务地区的时区

在全球化的背景下&#xff0c;小程序除了在中国使用外&#xff0c;还为海外的华人地区提供服务。例如我们采云小程序为泰国、阿根廷、缅甸等国家的商家就提供过微信小程序。这些商家开通小程序&#xff0c;为本地的华人提供服务。但通常小程序的开发者/服务商位于中国&#xff…