C++中的new、malloc、realloc、calloc——特点?函数原型?释放方式?区别?校招面试常问内容?
作者:求一个demo
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
内容通俗易懂,没有废话,文章最后是面试常问内容(建议通过标题目录学习)
废话不多说,我们直接开始------>>>>>>

一、new
1、功能:
(1)new:动态分配堆区内存,并调用对象的构造函数。
(2)delete:释放内存,并调用对象的析构函数。
2、特点:
①是C++的操作符,支持面向对象特性(如构造和析构)。
②无需手动计算内存大小(编译期自动计算)。
③可以重载(类级别或全局级别)。
④失败时抛出std::bad_alloc异常(除非使用nothrow版本)。
3、基本语法:
T* p = new T; // 分配单个对象(默认构造)
T* p = new T(args...); // 分配并带参数构造
T* arr = new T[N]; // 分配数组(N 个对象)
4、示例:
int* p = new int(42); // 分配一个 int 并初始化为 42
delete p; // 释放内存// 数组版本
int* arr = new int[10]; // 分配 10 个 int
delete[] arr; // 释放数组
二、malloc
1、功能:在堆区申请指定字节数 且未初始化的内存。
2、特点:
①是C库函数,不会调用构造函数和析构函数。
②需要手动计算内存大小(使用sizeof)。
③失败时返回NULL。
④与free配对使用释放内存。
⑤malloc初始化的堆内存通过memset等函数进行初始化(memset将一段内存初始化为一个指定值。void* memset(void *s,int c,size_t n),s为指向的那个内存块,c为设置的初始值,n为要被设置该值的字节数)。
3、函数原型:
#include <cstdlib> // 或 <stdlib.h>
void* malloc(size_t size);
//size要分配的字节数(通常用sizeof计算)。
4、示例:
int* p = (int*)malloc(sizeof(int)); // 分配一个 int
free(p); // 释放内存// 数组版本
int* arr = (int*)malloc(10 * sizeof(int)); // 分配 10 个 int
free(arr);
三、realloc
1、功能:调整已分配内存块的大小(扩大或缩小)。
2、特点:
①可能移动内存到新地址(原内容保留:先在ptr指向内存的起始地址往后扩展找newsize的空间(ptr是malloc申请的空间)。如果先前空间往后找不能满足大小,那就去堆区别的空间找newsize大小内存,然后将之前数据拷贝到这个新内存里。原来的空间会自动释放,不需要手动释放,新的空间用完需要自己free手动释放。)。
②若第一个参数为NULL,则等价于malloc。
③失败时返回NULL(原内存块仍有效)。
3、函数原型:
#include <cstdlib>
void* realloc(void* ptr, size_t new_size);
//ptr原内存指针(可为NULL,此时等价于malloc);
//new_size新的大小(字节数)。
4、示例:
int* p = (int*)malloc(10 * sizeof(int));
p = (int*)realloc(p, 20 * sizeof(int)); // 扩容到 20 个 int
free(p);
四、calloc
1、功能:分配内存,并将所有字节初始化为0。
2、特点:
①参数为元素数量和每个元素的大小。
②适合分配数组和结构体。
③与free配对使用 释放内存。
3、函数原型:
#include <cstdlib>
void* calloc(size_t num, size_t size);
//num元素数量;
//size每个元素的字节数。
4、示例:
int* p = (int*)calloc(1, sizeof(int)); // 分配并初始化为 0
int* arr = (int*)calloc(10, sizeof(int)); // 分配 10 个 int(全部为 0)
free(p);
free(arr);
五、区别(new、malloc、realloc、calloc)
①来源上:new来自C++原生;malloc、realloc、calloc都来自C库。
②初始化内存:new调用构造函数;malloc未初始化;calloc初始化为0;realloc保留原内容。
③释放方式:new通过delete/delete[]释放;malloc、realloc和calloc通过free释放。
④失败行为:new抛出异常;malloc、realloc、calloc返回NULL。
⑤计算大小:new自动计算(sizeof);malloc、realloc、calloc手动计算(sizeof)。
⑥适用场景:new适用于C++对象;malloc适用于原始内存;calloc适用于需要清零的内存;realloc适用于调整内存大小。
六、校招面试常问内容
1、new和malloc的区别?
2、malloc和calloc的区别?
①calloc将分配的内存初始化为0,malloc分配内存不初始化。
②calloc接收元素数量和元素大小,malloc直接接收总字节数。
③calloc因初始化可能比malloc慢,但安全性更高(避免使用未初始化内存等)。
3、realloc工作原理?
①若realloc失败,原指针仍然有效,需要手动free释放。
②realloc第一个参数若为NULL,则等价于malloc。
③缩小时可能会直接截断内存,多余的内存不一定释放(如果需要释放,可以先分配一个合适大小的内存块,将原内存块中的数据复制到新内存块中,然后释放原内存块)。
4、内存泄漏与野指针如何避免?
(1)内存泄漏避免:
①使用智能指针。
②遵循RAII原则(构造函数获取资源,析构函数释放资源)。
③工具检测(Valgrind)。
(2)野指针避免:
①free之后置空。
②使用智能指针。
③工具检测(Valgrind)。
最后,如有不足和错误的地方,期待私信指正!

相关文章:
C++中的new、malloc、realloc、calloc——特点?函数原型?释放方式?区别?校招面试常问内容?
作者:求一个demo 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 内容通俗易懂,没有废话,文章最后是面试常问内容(建议通过标题目录学习) 废话不多…...
27_promise
插入一下前端助手测试,顺手可以用来做安全 promise promise 是一个es6新增的语法 汉语:承诺的意思 作用:是专门用来解决回调地狱!!!! 什么是回调函数? <script>// 回调函数 callback回调// 就是把函数A当作参数传递到函数B中// 在函…...
leetcode刷题日记——跳跃游戏 II
[ 题目描述 ]: [ 思路 ]: 题目要求在一个一定能达到数组末尾的跳跃数组中(见55题 跳跃游戏),找出能够跳到末尾的最小次数要求次数最少,那肯定是选取能选步数中最大的数。也就是在当前能够达到的距离中,选择能够达到的…...
无人机进行航空数据收集对于分析道路状况非常有用-使用无人机勘测高速公路而不阻碍交通-
无人机进行航空数据收集对于分析道路状况非常有用-使用无人机勘测高速公路而不阻碍交通- 瑞士拥有1,400 多公里长的高速公路网络。这些公路将人和货物从山谷高原运送到阿尔卑斯山的最高山口。维护这些高速公路使国家得以顺利运转。高速公路维护的重要性显而易见,但在…...
注意力蒸馏技术
文章目录 摘要abstract论文摘要简介方法预备知识注意力蒸馏损失注意力引导采样 实验结论总结参考文献 摘要 本周阅读了一篇25年二月份发表于CVPR 的论文《Attention Distillation: A Unified Approach to Visual Characteristics Transfer》,论文开发了Attention Distillation…...
PERL开发环境搭建>>Windows,Linux,Mac OS
特点 简单 快速 perl解释器直接对源代码程序解释执行,是一个解释性的语言, 不需要编译器和链接器来运行代码>>速度快 灵活 借鉴了C/C, Basic, Pascal, awk, sed等多种语言, 定位于实用性语言,既具备了脚本语言的所有功能,也添加了高级语言功能 开源.免费 没有&qu…...
赛博威智慧导购平台,融合AI激活一线导购效能,破局增长瓶颈
导购管理≠“管人”,价值释放才是终极命题 在快消行业,一线导购是链接品牌与消费者的核心触点,更是市场洞察与销售转化的关键枢纽。然而,许多企业对导购的管理仍停留在“管人”的初级阶段:基础考勤、任务下发、薪资核…...
鸿蒙项目源码-记账本app个人财物管理-原创!原创!原创!
鸿蒙记账项目源码个人财务管理含文档包运行成功ArkTS语言。 我一个月写的原创作品,请尊重原创。 原创作品,盗版必究!!! api12 SDK5.0.0仅适用于最新的2024版本DevEco studio 共9个页面:广告倒计时页、登录、…...
深入理解 `git pull --rebase` 与 `--allow-unrelated-histories`:区别、原理与实战指南
🚀 git pull --rebase vs --allow-unrelated-histories 全面解析 在日常使用 Git 时,我们经常遇到两种拉取远程代码的方式:git pull --rebase 和 git pull --allow-unrelated-histories。它们的区别是什么?各自适用哪些场景&…...
ExpTimerApcRoutine函数分析之作用是ActiveTimerListHead里面移除定时器_etimer
第一部分: VOID ExpTimerApcRoutine ( IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2 ) /* Routine Description: This function is the special …...
Ovito的python脚本
在 OVITO 里,Python 对象是构建脚本化操作的基础。下面为你详细介绍 OVITO 中 Python 对象的基本概念: 1. 数据管道(Pipeline) 数据管道是 OVITO 里最核心的对象之一。它就像一个流水线,把数据输入进来,经过一系列处理步骤,最后输出处理好的数据。 创建管道:借助 imp…...
【免费】2007-2019年各省地方财政文化体育与传媒支出数据
2007-2019年各省地方财政文化体育与传媒支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政文化体育与传媒支出 4、范围:31省 5、指标说明:地方财政在文化、…...
3PL EDI:SA Piper Logistics EDI需求分析
SA Piper Logistics成立于2005年,是一家专注于全球供应链管理的第三方物流服务商(3PL),总部位于美国芝加哥。公司以“优化物流效率,重塑供应链价值”为使命,提供仓储管理、运输规划、订单履行及跨境清关等一…...
NOIP2007提高组.矩阵取数游戏
题目 492. 矩阵取数游戏 思路 不难发现, 每一行之间是独立的, 因此可以求出每一行的最大值, 然后行与行之间最大值相加, 就是总的最大值 对于行内来说, 每次可以选取左边或者右边, 可以使用区间 d p dp dp求解, 时间复杂度 O ( n 3 ) O(n ^ 3) O(n3), 因为列的最大值是 80 …...
项目实战--权限列表
后端数据: 用表格实现权限列表 const dataSource [{key: 1,name: 胡彦斌,age: 32,address: 西湖区湖底公园1号,},{key: 2,name: 胡彦祖,age: 42,address: 西湖区湖底公园1号,}, ];const columns [{title: 姓名,dataIndex: name,key: name,},{title: 年龄,dataInd…...
若依赖前端处理后端返回的错误状态码
【背景】 后端新增加了一个过滤器,用来处理前端请求中的session 若依赖存放过滤器的目录:RuoYi-Vue\ruoyi-framework\src\main\java\com\ruoyi\framework\security\filter\ 【问题】 后端返回了一个状态码为403的错误,现在前端需要处理这…...
【计网】数据包
期末复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 1.数据包的定义: 数据包是网络通信中的基本单元,它包含了通过网络传输的所有必要信息。数据包的结构…...
web权限划分提权和移权
前言:权限的基本认知 渗透权限划分:假如我们通过弱口令进入到web的后台 这样我们就拿到了web的管理员权限 管理员权限是web中最高的权限(一般我们进入web的时候数据库会进行用户权限的划分:假设 0-10为最高的权限 11-10000为普通…...
LocalDateTime序列化总结
版权说明: 本文由CSDN博主keep丶原创,转载请保留此块内容在文首。 原文地址: https://blog.csdn.net/qq_38688267/article/details/146703276 文章目录 1.背景2.序列化介绍常见场景关键问题 3.总体方案4.各场景实现方式WEB接口EasyExcelMybat…...
[ 春秋云境 ] Initial 仿真场景
文章目录 靶标介绍:外网内网信呼oa永恒之蓝hash传递 靶标介绍: Initial是一套难度为简单的靶场环境,完成该挑战可以帮助玩家初步认识内网渗透的简单流程。该靶场只有一个flag,各部分位于不同的机器上。 外网 打开给的网址, 有一…...
unity 截图并且展现在UI中
using UnityEngine; using UnityEngine.UI; using System.IO; using System.Collections.Generic; using System; using System.Collections;public class ScreenshotManager : MonoBehaviour {[Header("UI 设置")]public RawImage latestScreenshotDisplay; // 显示…...
XHR.readyState详解
XHR.readyState详解 引言 XHR.readyState是XMLHttpRequest对象的一个属性,它反映了当前请求的状态。在Ajax编程中,正确理解和使用XHR.readyState对于调试和确保异步请求的正确执行至关重要。本文将详细介绍XHR.readyState的属性值、含义以及在Ajax请求中的具体应用。 XHR.…...
SQL Server数据库引擎服务启动失败:端口冲突
问题现象: SQL Server 2022 安装完成后,数据库引擎服务无法启动,日志报错 “TCP 端口 1433 已被占用”(ERROR_LOG_SYS_TCP_PORT)。 快速诊断 检测端口占用: # 查看 1433 端口占用情况(需管理员权…...
前端知识点---用正则表达式判断邮箱(javascript)
// 全面的正则(兼容大多数情况) const emailRegex /^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$/;// 或直接使用浏览器内置验证 <input type"email" required>/:正则表达式的起始和结束标志。 ^:匹配字符串的…...
中断管理常用API(四)
一、request_irq(...) request_irq 函数主要用于硬中断相关操作,它的核心作用是把一个中断处理函数和特定的中断号进行绑定。当硬件设备触发该中断号对应的中断时,内核就会调用绑定的中断处理函数,像 irqhandler_func 这类。 此函数在多种硬件…...
RabbitMQ高级特性--重试特性
目录 1.重试配置 2.配置交换机&队列 3.发送消息 4.消费消息 5. 运行程序观察结果 6. 手动确认 注意: 在消息传递过程中, 可能会遇到各种问题, 如网络故障, 服务不可用, 资源不足等, 这些问题可能导致消息处理失败. 为了解决这些问题, RabbitMQ 提供了重试机制, …...
pyspark学习rdd处理数据方法——学习记录
python黑马程序员 """ 文件,按JSON字符串存储 1. 城市按销售额排名 2. 全部城市有哪些商品类别在售卖 3. 上海市有哪些商品类别在售卖 """ from pyspark import SparkConf, SparkContext import os import jsonos.environ[PYSPARK_P…...
C语言入门教程100讲(0)从了解C语言的发展史开始
文章目录 引言1. C语言的起源2. C语言的诞生3. C语言的标准化4. C语言的进一步发展5. C语言的影响与应用6. C语言的未来结语引言 C语言作为一种高效、灵活且具有广泛应用的编程语言,在计算机科学史上占据着举足轻重的地位。它的设计不仅影响了后来的编程语言,也对操作系统、…...
【HTML 基础教程】HTML <head>
HTML <head> 查看在线实例 - 定义了HTML文档的标题"><title> - 定义了HTML文档的标题 使用 <title> 标签定义HTML文档的标题 - 定义了所有链接的URL"><base> - 定义了所有链接的URL 使用 <base> 定义页面中所有链接默认的链接目…...
练习题:111
目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 指定文件路径和名称: 定义要写入的内容: 打开文件并写入内容: 异常处理: 输出提示信息: 运行思路 结束语 Python题…...
