面经--C语言——内存泄漏、malloc和new的区别 .c文件怎么转换为可执行程序 uart和usart的区别 继承的访问权限总结

文章目录

    • 内存泄漏
      • 预防内存泄漏的方法:
    • malloc和new的区别
    • .c文件怎么转换为可执行程序
    • uart和usart的区别
    • 继承的访问权限总结
      • 访问控制符总结
      • 1. **public**:
      • 2. **protected**:
      • 3. **private**:
        • 继承类型:

内存泄漏

内存泄漏是指程序在运行时动态分配内存后,未能及时释放已经不再使用的内存空间。内存泄漏会导致程序的内存占用不断增加,最终可能引发程序崩溃。常见的内存泄漏情况包括:

  • 动态分配内存后没有使用 free()delete 来释放内存。
  • 在循环中不断申请内存但不释放。
  • 对象生命周期结束后没有及时清除内存。

预防内存泄漏的方法:

  1. 合理使用 free()delete: 每次使用 malloc()calloc()new 分配内存后,应该在使用完之后调用 free()delete 来释放内存。
  2. 智能指针:在 C++ 中,可以使用智能指针如 std::unique_ptrstd::shared_ptr 来自动管理内存。
  3. 内存检测工具:使用内存泄漏检测工具,如 ValgrindAddressSanitizer 来检测内存泄漏。

malloc和new的区别

malloc()new 都用于动态内存分配,但它们有一些重要的区别:

特性mallocnew
返回类型返回 void* 类型,需要强制转换成目标类型返回目标类型的指针
初始化内存不会初始化分配的内存,内存中的数据为垃圾值会初始化分配的内存,默认为零
异常处理如果分配失败,返回 NULL如果分配失败,抛出 std::bad_alloc 异常
释放内存使用 free() 来释放内存使用 delete 来释放内存
语言支持适用于 C 语言适用于 C++,并且支持对象的构造与析构

.c文件怎么转换为可执行程序

在 C 语言中,.c 文件需要经过编译、链接等过程才能生成可执行程序。具体步骤如下:

  1. 编译源代码
    使用 C 编译器(如 GCC)将 .c 文件编译为目标文件(.o 文件)。命令格式:

    gcc -c filename.c -o filename.o
    
  2. 链接目标文件
    将目标文件与所需的库文件链接,生成最终的可执行文件。命令格式:

    gcc filename.o -o output_executable
    
  3. 运行可执行文件
    在命令行中运行生成的可执行文件:

    ./output_executable
    

如果你直接用 gcc filename.c -o output_executable 命令,编译和链接的步骤会自动合并。

uart和usart的区别

UART(Universal Asynchronous Receiver-Transmitter)和 USART(Universal Synchronous Asynchronous Receiver-Transmitter)都用于串行通信,但它们之间有一些关键的区别:

特性UARTUSART
通信方式只支持异步通信支持同步和异步通信
传输模式不需要时钟信号需要时钟信号(用于同步模式)
应用场景适用于大多数简单的串行通信用于高速数据传输以及同步数据流
常见设备用于常见的串口通信设备(如计算机、GPS、蓝牙模块等)用于更加复杂的通讯需求(如调制解调器、网络模块等)

继承的访问权限总结

在面向对象编程中,继承是非常常见的特性。C++ 提供了三种访问控制符:publicprotectedprivate,它们决定了基类成员在派生类中的访问权限。

访问控制符总结

访问控制符类内部派生类类外部
public可访问可访问可访问
protected可访问可访问不可访问
private可访问不可访问不可访问

1. public:

  • 基类中的 public 成员可以被派生类和类外部访问。
  • 可以在派生类中继承,派生类成员仍然保持 public 权限。

2. protected:

  • 基类中的 protected 成员可以被派生类访问,但不能被类外部访问。
  • 通常用于在派生类中修改或使用这些成员。

3. private:

  • 基类中的 private 成员只能在基类内部访问,派生类和类外部都不能访问。
  • 如果派生类需要访问这些成员,可以通过公有或受保护的成员函数来间接访问。
继承类型:
  • 公有继承public): 基类的 publicprotected 成员在派生类中保持其访问级别。
  • 保护继承protected): 基类的 publicprotected 成员在派生类中变为 protected
  • 私有继承private): 基类的 publicprotected 成员在派生类中变为 private

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git:恢复纯版本库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

蓝桥杯python基础算法(2-1)——排序

目录 一、排序 二、例题 P3225——宝藏排序Ⅰ 三、各种排序比较 四、例题 P3226——宝藏排序Ⅱ 一、排序 (一)冒泡排序 基本思想:比较相邻的元素,如果顺序错误就把它们交换过来。 (二)选择排序 基本思想…

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

【1】引言 前序学习进程中,对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像,每个像素点上的BGR值为三个整数,因为是三通道图像;对于灰度图像,各个像素上的BGR值是一个整数,因为这是单通…

Slint的学习

Slint是什么 Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c,python,nodejs等语言。 开源地址:https://github.com/slint-ui/slint 镜像地址:https://kkgithub.com/…

惰性函数【Ⅱ】《事件绑定的自我修养:从青铜到王者的进化之路》

【Ⅱ】《事件绑定的自我修养:从青铜到王者的进化之路》 1. 代码功能大白话(给室友讲明白版) // 青铜写法:每次都要问浏览器"你行不行?" function addEvent青铜版(element, type, handler) {if (window.add…

Unity飞行代码 超仿真 保姆级教程

本文使用Rigidbody控制飞机,基本不会穿模。 效果 飞行效果 这是一条优雅的广告 如果你也在开发飞机大战等类型的飞行游戏,欢迎在主页搜索博文并参考。 搜索词:Unity游戏(Assault空对地打击)开发。 脚本编写 首先是完整代码。 using System.Co…

基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

C++编程语言:抽象机制:模板(Bjarne Stroustrup)

目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …

多线程的常用方法

getName和setName方法 注意点 setName方法最好放在线程启动之前 最好在线程启动之前修改名字,因为线程启动之后,如果执行过快的话,那么在调用 setName() 之前线程可能就已经结束了 MyThread t1 new MyThread("haha"); t1.setNa…

C++继承的基本意义

文章目录 一、继承的本质和原理二、重载、隐藏和覆盖三、基类与派生类的转换 一、继承的本质和原理 继承的本质:a. 代码的复用 b. 类和类之间的关系: 组合:a part of… 一部分的关系 继承:a kind of… 一种的关系 总结&#xff…

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构,…

FinRobot:一个使用大型语言模型的金融应用开源AI代理平台

“FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models” 论文地址:https://arxiv.org/pdf/2405.14767 Github地址:https://github.com/AI4Finance-Foundation/FinRobot 摘要 在金融领域与AI社区间&a…

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)

目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结: 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…

Qt跨屏窗口的一个Bug及解决方案

如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio&#xf…

Linux 传输层协议 UDP 和 TCP

UDP 协议 UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度如果校验和出错, 就会直接丢弃 UDP 的特点 UDP 传输的过程类似于寄信 . 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…

安全实验作业

一 拓扑图 二 要求 1、R4为ISP,其上只能配置IP地址;R4与其他所有直连设备间均使用共有IP 2、R3-R5-R6-R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分; 4、所有设备均可访问R4的环回&#x…

防御保护:安全策略配置

目录 一、实验拓扑 二、实验要求 ​编辑 三、要求分析 四、实验配置 前置配置 1.配置vlan与access、truck接口 2.进入web界面进行配置 3.安全策略的配置 3.1实现实验需求2(办公区PC在工作日时间(周一至周五,早8晚6)可以正常访问OA Server,其他时间不允许) 新建地址…

第一个Qt开发实例(一个Push Button按钮和两个Label)【包括如何在QtCreator中创建新工程、代码详解、编译、环境变量配置、测试程序运行等】

目录 Qt开发环境QtCreator的安装、配置在QtCreator中创建新工程在Forms→mainwindow.ui中拖曳出我们要的图形按钮查看拖曳出按钮后的代码为pushButton这个图形添加回调函数编译工程关闭开发板上QT的GUI(选做)禁止LCD黑屏(选做)设置Qt运行的环境变量运行Qt程序如何让程序在系统启…

【含文档+PPT+源码】基于大数据的交通流量预测系统

项目介绍 本课程演示的是一款基于Python的图书管理系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附…

第二十三章 MySQL锁之表锁

目录 一、概述 二、语法 三、特点 一、概述 表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。 对于表级锁,主要分为以下三类: 1. 表锁 2. 元数…