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

server/2024/10/18 3:32:08/

文章目录

      • 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进行释放)。
  • ⚽ 栈上的内存分配和释放是自动的,速度较快。而堆上的内存分配和释放需要手动操作,速度相对较慢。

http://www.ppmy.cn/server/116968.html

相关文章

HSmartWindowControl 滚轮缩放 交互式绘制ROI 可修改 存储

一直想达到这个效果,奈何智商简单;今天来做一下记录; 个人习惯 Winform 新建以后删除xxx.designer.cs再双击Form1.cs设计器;就会在该 文件下 自动生成InitializeComponent() 且可 由设计器生成的所有winform界面程序则会出现在InitializeComponent()里面; 这样的好处很多,所…

HCIE和CCIE,哪个含金量更高点?

在现在内卷的大环境下,技术岗可谓人人自危,也因此各种认证的重视程度直线升高。 特别是华为认证的HCIE和思科认证的CCIE,它们都代表着网络技术领域的顶尖水平。 但面对这两个高含金量的认证,不得不让人问出这个问题:同…

第十七章 手动添加安全元素

文章目录 第十七章 手动添加安全元素添加安全标头元素标题元素的顺序 第十七章 手动添加安全元素 本主题主要介绍如何手动向 IRIS Web 服务和 IRIS Web 客户端发送的消息中添加安全元素。 以下主题提供了有关特定安全任务的详细信息。 添加安全标头元素 要将安全元素添加到…

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker…

10分钟在网站上增加一个AI助手

只需 10 分钟,为您的网站添加一个 AI 助手,以便全天候(7x24)回应客户咨询,提升用户体验、增强业务竞争力。 方案概览 在网站中引入一个 AI 助手,只需 4 步: 创建大模型问答应用:我们…

工作流技术(WorkFlow)

什么是工作流 1.使用编程语言完成一套固定的审批流程 例如请假审批流程 订单配送流程 入职,辞职审批流程 2.使用场景 业务类:合同审批流程、订单处理流程、出入库审批流程等。 行政类:请假流程、出差流程、用车流程、办公用品申请流程…

BC172 牛牛的排列数(c 语言)

1.我们先输入n m的数字&#xff0c;因为n!/(n-m)!的阶乘。即4&#xff01;4*3*2*1&#xff0c;2&#xff01;2*1&#xff0c;4&#xff01;/2&#xff01;12.或者4&#xff01;4*3*2&#xff01;。 #include<sdtio.h> int main() {int n 0;int m 0;long long a 1;whi…

How can I load the openai api configuration through js in html?

题意&#xff1a;怎样在HTML中通过JavaScript加载OpenAI API配置 问题背景&#xff1a; I am trying to send a request through js in my html so that openai analyzes it and sends a response, but if in the js I put the following: 我正在尝试通过HTML中的JavaScript发…