小学生学C++编程语法知识(C++中new 和 malloc的区别)
我们先给同学们一个最重要的结论new是 C 的动态内存申请方式malloc是 C 语言的动态内存申请方式。C 中通常优先使用new更现代的 C 则更推荐智能指针、vector等方式。一、为什么需要new和malloc先看普通变量int x 10;我们让计算机创建一个int。但是有时候我们不知道程序运行后到底需要多少空间。比如老师说“今天来了多少个同学”如果来了 10 个int a[10];如果来了 100 个int a[100];可是如果我们运行程序以后才知道人数呢这时候就需要动态内存。也就是“程序运行的时候需要多少内存我再向计算机申请多少。”这就是new和malloc要解决的问题。二、new是什么最简单的例子int *p new int;这句话可以拆成两步理解new int ↓ 向系统申请一块能够存放 int 的内存 ↓ 返回这块内存的地址 ↓ 让 p 保存这个地址所以int *p new int;可以想象成p │ │ ▼ ┌─────────┐ │ int │ └─────────┘然后*p 100;就可以把100放进去。三、new可以直接初始化这是new非常方便的地方。例如int *p new int(100);意思就是申请一个int的空间并且把它初始化成100。相当于p │ ▼ ┌─────────┐ │ 100 │ └─────────┘还可以double *p new double(3.14);甚至string *p new string(hello);这就是 C 的一个重要特点new不仅仅是申请内存还可以调用对象的构造函数完成初始化。这一点后面会非常重要。四、申请完了以后怎么办动态申请的内存不会像普通变量一样自动消失。所以int *p new int(100);使用完以后我们需要delete p;完整代码int *p new int(100); cout *p endl; delete p; p nullptr;这里形成一个非常重要的配对new ↓ 申请内存 ↓ 使用 ↓ delete ↓ 释放内存一定要记住new对应delete。五、那么malloc是什么malloc是 C 语言提供的动态内存申请函数。需要#include cstdlib例如int *p (int*)malloc(sizeof(int));这句话是什么意思我们一步一步看。sizeof(int)表示一个int需要多少字节。例如很多系统中sizeof(int)结果是4所以malloc(sizeof(int))就是“帮我申请能够放下一个int的这么多字节。”六、malloc和new最直观的区别看看Cint *p new int;Cint *p (int*)malloc(sizeof(int));它们都可以申请动态内存。但是写法完全不同。可以简单理解成new │ ├── C的 ├── 直接写类型 ├── 可以初始化 └── 可以调用构造函数 malloc │ ├── C语言的 ├── 只知道申请多少字节 ├── 不负责对象初始化 └── 不调用构造函数七、最大的区别之一new知道“类型”比如int *p new int(10);new知道我要创建的是一个int。所以它知道应该申请 int 的空间 ↓ 创建 int 对象 ↓ 初始化而malloc(sizeof(int))本质上只是“给我一块这么大的内存。”它并不知道“我要创建一个什么 C 对象。”这个区别在学习类以后特别重要。八、new可以调用构造函数这是 C 学习中非常非常重要的一点。假设我们有一个类class Student { public: Student() { cout 学生出生了 endl; } };然后Student *p new Student();会发生new Student() ↓ 申请内存 ↓ 创建 Student 对象 ↓ 调用 Student 的构造函数 ↓ 输出 学生出生了也就是说new不只是申请内存还负责“创建对象”。九、malloc不会调用构造函数如果强行拿malloc来处理 C 类对象就会遇到非常重要的问题。例如class Student { public: Student() { cout 构造函数 endl; } };使用Student *p (Student*)malloc(sizeof(Student));这里malloc只是申请了一块内存。不会自动调用Student()所以new Student() ↓ 申请内存 ↓ 调用构造函数 ↓ 真正创建对象而malloc(...) ↓ 申请一块原始内存 ↓ 不会调用构造函数这也是为什么C 中创建对象应该使用new而不是用malloc。十、释放内存的方式也不一样这是第二个必须记住的区别。newint *p new int(10); delete p;对应new → deletemallocint *p (int*)malloc(sizeof(int)); free(p);对应malloc → free千万不要混用十一、千万不要这样写错误①int *p new int(10); free(p);不应该这样。因为new应该对应delete错误②int *p (int*)malloc(sizeof(int)); delete p;也不应该这样。因为malloc应该对应free十二、为什么不能混用可以把它想象成两套不同的“借东西系统”。系统 Anew ↓ C动态内存系统 ↓ delete系统 Bmalloc ↓ C动态内存系统 ↓ free你不能A系统借东西 ↓ B系统还东西也不能B系统借东西 ↓ A系统还东西因此记住new↔deletemalloc↔free十三、还有一个特别重要的区别数组new可以非常方便地申请数组。例如int *p new int[10];意思动态申请 10 个int。使用p[0] 10; p[1] 20;最后delete[] p; p nullptr;注意这里不是delete p;而是delete[] p;因为new int ↓ delete new int[10] ↓ delete[]这是另一个非常重要的配对关系。十四、malloc也可以申请数组例如int *p (int*)malloc(10 * sizeof(int));表示申请可以放下 10 个int的内存。释放free(p);所以申请释放new intdeletenew int[10]delete[]malloc(...)free()十五、把new和malloc放在一起比较对比newmalloc来自哪里CC本质C运算符C函数是否知道类型✅❌只知道字节数是否可以初始化✅❌是否调用构造函数✅❌返回值对应类型的指针void*释放deletefree数组new[]malloc计算总字节数C中推荐一般优先于 malloc通常不推荐直接使用十六、还有一个区别申请失败时这个属于稍微进阶一点的知识。例如int *p new int;如果内存申请失败默认情况下new会抛出std::bad_alloc而malloc(...)申请失败时通常返回nullptr例如int *p (int*)malloc(sizeof(int)); if (p nullptr) { cout 申请内存失败; }同学们现在不用死记只需要知道new和malloc不仅写法不同它们连“申请失败后的处理方式”也不同。十七、最重要的问题C是不是应该大量使用new这里我要特别提醒初学 C 的同学不要因为学会了new以后所有东西都写new。例如int *p new int(10);很多情况下根本没有必要。直接int x 10;就很好。如果需要动态数组现代 C 通常更推荐vectorint a(10);而不是int *p new int[10];因为vector会自动管理内存。你不用记delete[]也不用担心很多内存管理问题。十八、所以现代 C的思想是什么可以把 C 的内存管理发展理解成最原始 malloc / free ↓ C语言风格 C new / delete ↓ 可以创建对象 可以调用构造函数 现代 C vector string unique_ptr shared_ptr ↓ 尽量让程序自动管理资源所以学习顺序可以是先学malloc/free理解“内存就是一块空间”再学new/delete理解“C不仅管理内存还要管理对象”最后学习 RAII、智能指针、vector理解“尽量不要让程序员自己管理内存”。十九、给同学们一个“魔法仓库”的故事假设计算机是一座巨大的仓库。malloc你对仓库管理员说“给我一块40 字节的空间。”管理员“好的。”他不关心你准备干什么。malloc(40) ┌────────────────────────┐ │ 40字节空间 │ └────────────────────────┘new你说“请给我一个Student对象。”管理员知道“哦你要的是一个 Student”于是new Student() ↓ 申请空间 ↓ 创建 Student ↓ 调用 Student 构造函数所以malloc 更像“给我一块空房间”。new 更像“帮我建好一个房间并把里面的东西初始化好”。二十、最后用一句话彻底记住如果考试问C 中new和malloc有什么区别可以从这几个关键词回答第一层new是 C 的malloc是 C 的。第二层new按类型申请内存malloc按字节数申请内存。第三层new可以初始化对象并且会调用构造函数malloc不会调用构造函数。第四层new对应deletenew[]对应delete[]malloc对应free。第五层现代 C 中很多情况下应该优先使用vector、string、智能指针等自动管理资源的工具而不是手动new/delete。最后送给同学们一个非常好记的口诀malloc我要一块内存new我要一个 C 对象malloc → freenew → deletenew[] → delete[]现代 C能不用手动管理就尽量不用手动管理。这也正好和上一课的野指针、悬空指针连起来new/delete用得不规范很容易制造悬空指针而现代 C 的vector、智能指针等工具就是在帮助我们减少这类内存管理错误。

相关新闻

APMCM证书与奖品发放全流程解析:从评审到接收的完整指南

APMCM证书与奖品发放全流程解析:从评审到接收的完整指南

1. 从“参赛”到“收获”:APMCM证书与奖品的完整交付流程解析 每年,当亚太地区大学生数学建模竞赛(APMCM)的评审工作尘埃落定,最牵动参赛者心弦的时刻莫过于等待证书和奖品发放。这不仅仅是一纸证明或一份实物&#xf…

2026/8/15 6:54:59 阅读更多 →
三维装箱与多目标优化:从算法原理到物流实践

三维装箱与多目标优化:从算法原理到物流实践

1. 项目概述与核心价值看到“2026年MathorCup杯D题多目标货物运输装箱策略优化”这个标题,很多参加过数学建模竞赛的朋友,尤其是对运筹优化、物流规划感兴趣的同学,估计眼睛都亮了。这不仅仅是一个赛题,它几乎是现实物流行业中“降…

2026/8/15 11:08:50 阅读更多 →
资源受限项目调度与人员排班优化:从数学建模到算法求解实战

资源受限项目调度与人员排班优化:从数学建模到算法求解实战

1. 项目概述:从赛题到实战的思维跃迁 又到了MathorCup开赛的季节,第十届B题一出来,我身边不少同学和学弟学妹就开始挠头了。这题看着像是个经典的优化问题,但细读下来,里面埋的“坑”和能做的“文章”可真不少。它本质…

2026/8/15 12:45:56 阅读更多 →

最新新闻

网盘下载太慢太折腾?一个脚本搞定八大网盘直链下载

网盘下载太慢太折腾?一个脚本搞定八大网盘直链下载

网盘下载太慢太折腾?一个脚本搞定八大网盘直链下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…

2026/8/15 14:03:09 阅读更多 →
LabVIEW开发O形圈寿命预测

LabVIEW开发O形圈寿命预测

同一批O形圈老化数据,纯LabVIEW处理要3天,混编Origin只要10分钟,寿命预测误差不到5%。预计阅读约 4 分钟01 一个密封圈,藏着整个行业最耗时的环节O形圈,一个几块钱的橡胶圈,却直接决定液压密封、管道阀门、…

2026/8/15 14:03:09 阅读更多 →
蔚蓝档案自动化脚本三步上手:日常任务从四十分钟缩到五分钟

蔚蓝档案自动化脚本三步上手:日常任务从四十分钟缩到五分钟

蔚蓝档案自动化脚本三步上手:日常任务从四十分钟缩到五分钟 【免费下载链接】blue_archive_auto_script 支持按轴凹总力战, 无缝制造三解, 用于实现蔚蓝档案自动化的程序( Steam已适配 ) 项目地址: https://gitcode.com/gh_mirrors/bl/blue_archive_auto_script …

2026/8/15 14:03:09 阅读更多 →
【经济、管理多主题EI、EI(JA)期刊征稿】第五届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2026)

【经济、管理多主题EI、EI(JA)期刊征稿】第五届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2026)

第五届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2026)定于2026年9月18-20日在中国-天津举行。会议主要围绕公共管理、数字经济,互联网技术等研究领域展开讨论。会议旨在为从事公共管理、经济、大数据、互联网研究的专家学者提供一个…

2026/8/15 14:03:08 阅读更多 →
AI Agent 面试题 420:如何设计Agent的记忆过期和清理策略?

AI Agent 面试题 420:如何设计Agent的记忆过期和清理策略?

🔥 AI Agent 面试题 420:如何设计Agent的记忆过期和清理策略?摘要:本文深入解析了「如何设计Agent的记忆过期和清理策略?」这一 AI Agent 领域的核心面试题。文章从 记忆检索策略 的基本概念出发,系统性地剖…

2026/8/15 14:03:08 阅读更多 →
IDM试用重置终极攻略:不重装不破解,30秒把试用期重新拨回30天

IDM试用重置终极攻略:不重装不破解,30秒把试用期重新拨回30天

IDM试用重置终极攻略:不重装不破解,30秒把试用期重新拨回30天 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 下载到 98% 突然弹窗"试用期已结束"&a…

2026/8/15 14:02:08 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/15 12:59:14 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →