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

【C++ 高频面试题】new、delete 与 malloc、free的区别

文章目录

      • 1. new 和 malloc 有什么区别
      • 2. delete 和 free 有什么区别?
      • 3. 堆和栈的区别

1. new 和 malloc 有什么区别

  • 🐧类型安全问题:
    (1)newC++的运算符,可以为对象分配内存并调用相应的构造函数。
    (2)mallocC语言库函数,只分配指定大小的内存块,不调用构造函数。

  • 🐧返回类型:
    (1)new返回的是具体类型的指针,而且不需要进行类型转换。
    (2)malloc返回的是void*需要进行类型转换,因为它不知道所分配内存的用途。

  • 🐧内存分配失败时的行为:
    (1)new在内存分配失败时会抛出std::bad_alloc异常。
    (2)malloc在内存分配失败时返回NULL

  • 🐧内存块大小:
    (1)new可以用于动态分配数组,并知道数组大小。
    (2)malloc只是分配指定大小的内存块,不了解所分配内存块的具体用途。

  • 🐧释放内存的方式:
    (1)delete会调用对象的析构函数,然后释放内存。
    (2)free只是简单的释放内存块,不会调用对象的析构函数。


2. delete 和 free 有什么区别?

  • 🐧类型安全性:
    (1)delete会调用对象的析构函数,确保资源被正确释放;
    (2)free只是简单释放内存块。

  • 🐧内存块释放后的行为:
    (1)delete释放的内存块的指针值会被设置为nullptr,以避免野指针。 野指针指的是指向已被释放的或无效的内存地址的指针
    (2)free不会修改指针的值,可能导致野指针问题。

  • 🐧数组的释放:
    (1)delete可以正确释放通过 new []分配的数组。
    (2)free不了解数组的大小,不适用于释放通过malloc分配的数组。


3. 堆和栈的区别

  • 🐧栈和堆都是用于存储程序数据的内存区域。栈是一种有限的内存区域,用于存储局部变量、函数调用信息等。堆是一种动态分配的内存区域,用于存储程序运行时动态分配的数据。
  • 🍎栈上变量的声明周期与其所在函数的执行周期相同,而堆上变量的生命周期由程序员显示控制,可以使用(mallloc、new)申请,使用(deletefree进行释放)。
  • ⚽ 栈上的内存分配和释放是自动的,速度较快。而堆上的内存分配和释放需要手动操作,速度相对较慢。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 64位系统中不支持In.vi与Out.vi的原因
  • 深入理解指针(二)
  • GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制
  • Nginx:Web架构中的全能战士
  • 020、二级Java选择题综合知识点(持续更新版)
  • python vtk 绘制圆柱体和包围盒
  • 网络工程师学习笔记——网络互连与互联网
  • 数据库体系结构概述
  • Python实现牛顿法 目录
  • I/O 多路复用:`select`、`poll`、`epoll` 和 `kqueue` 的区别与示例
  • 【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用
  • CCF201912_1
  • Mysql 的查询过慢如何排查以及优化
  • UQpy | 不确定性量化Python工具箱推荐
  • SAP Fiori UI5-环境搭建-2022-2024界面对比
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 4个实用的微服务测试策略
  • Angular数据绑定机制
  • IndexedDB
  • JavaScript-Array类型
  • Median of Two Sorted Arrays
  • Redis学习笔记 - pipline(流水线、管道)
  • Sublime text 3 3103 注册码
  • Vue 动态创建 component
  • 数据科学 第 3 章 11 字符串处理
  • 微信小程序设置上一页数据
  • 优秀架构师必须掌握的架构思维
  • 最简单的无缝轮播
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​secrets --- 生成管理密码的安全随机数​
  • ​zookeeper集群配置与启动
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # wps必须要登录激活才能使用吗?
  • #FPGA(基础知识)
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (六)DockerCompose安装与配置
  • (七)Java对象在Hibernate持久化层的状态
  • (三十五)大数据实战——Superset可视化平台搭建
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)Controller接口控制器详解(三)
  • (小白学Java)Java简介和基本配置
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)为C# Windows服务添加安装程序
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .Mobi域名介绍
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 的缓存方案
  • .NET Core 中插件式开发实现
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net连接oracle数据库
  • .Net组件程序设计之线程、并发管理(一)