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

C++内存管理:new/delete与内存泄漏实战

一、上期回顾掌握函数模板、类模板、泛型编程、模板特化理解了 STL 容器能适配任意类型的底层原因。今天攻坚C 内存管理搞定 new/delete、内存分区、野指针、内存泄漏四大核心痛点。二、C/C 程序内存五大分区程序运行时内存划分为 5 块面试必背栈区局部变量、函数形参、栈对象自动分配自动释放堆区new/malloc 开辟的空间手动申请手动释放全局 / 静态区全局变量、static 静态变量程序全程存在常量区字符串常量、const 全局常量只读不可修改代码区存放二进制程序指令只读三、malloc/free 与 new/delete 核心区别1. C 语言 malloc/free只分配原始内存不调用构造、析构函数需要强转类型、手动计算字节大小不会初始化内存int* p (int*)malloc(sizeof(int)); free(p);2. C new/delete分配内存 自动调用构造函数释放内存 自动调用析构函数无需计算大小、无需强转支持数组形式 new [] /delete []int* p new int; delete p; // 数组开辟 int* arr new int[5]; delete[] arr;核心区别总结new 自动调用构造malloc 只开空间new 无需强转、自动计算大小delete 自动调用析构free 直接回收内存数组必须配对new[]和delete[]四、new 的三种使用形式// 1. 普通开辟单个变量 int* p1 new int; // 2. 开辟并初始化 int* p2 new int(100); // 3. 开辟数组 int* p3 new int[5];五、内存泄漏成因与规避什么是内存泄漏堆空间用new申请后没有 delete 释放程序不退出内存一直占用。常见泄漏场景函数内 new没有返回也没有释放指针重新赋值旧地址丢失无法释放类中堆成员析构函数没写 delete避坑原则谁申请谁释放成对使用 new/delete六、野指针成因与危害野指针定义指向非法未知内存的指针没有有效指向。产生原因指针未初始化随机地址指针指向栈变量变量销毁后指针悬空内存释放后未把指针置空规避方法定义指针初始化为nullptr释放内存后立刻置空不访问悬空指针// 规范写法 int* p new int; delete p; p nullptr; // 置空避免野指针七、内存经典错误示范错误 1重复释放int* p new int; delete p; delete p; // 崩溃重复释放错误 2数组不匹配 delete []int* arr new int[5]; delete arr; // 错误必须 delete[]错误 3野指针访问int* p; *p 10; // 未初始化野指针崩溃八、构造析构与 new/delete 联动演示#include iostream using namespace std; class Test { public: Test(){cout 构造函数调用 endl;} ~Test(){cout 析构函数调用 endl;} }; int main() { // 栈对象自动构造、自动析构 Test t1; // 堆对象new触发构造delete触发析构 Test* t2 new Test; delete t2; return 0; }运行结果构造函数调用 构造函数调用 析构函数调用 析构函数调用九、今日核心总结内存五分区栈、堆、全局静态、常量、代码区new/delete 比 malloc/free 多了构造析构调用数组必须严格配对new[]和delete[]内存泄漏new 不 delete野指针未初始化 / 悬空指针开发规范指针初始化为空、释放后置空、成对申请释放十、课后练习用 new 开辟单个 int 并初始化delete 释放尝试不 delete 观察内存泄漏逻辑定义未初始化指针理解野指针危害

相关文章:

C++内存管理:new/delete与内存泄漏实战

一、上期回顾掌握函数模板、类模板、泛型编程、模板特化,理解了 STL 容器能适配任意类型的底层原因。今天攻坚C 内存管理,搞定 new/delete、内存分区、野指针、内存泄漏四大核心痛点。二、C/C 程序内存五大分区程序运行时内存划分为 5 块,面试…...

从零打造全能启动盘:银灿IS903主控与东芝SLC颗粒的量产实战

1. 什么是U盘量产?为什么选择银灿IS903主控? 第一次听说"U盘量产"这个词时,我也是一头雾水。简单来说,量产就是直接对U盘的主控芯片进行底层编程操作,相当于给U盘做"心脏手术"。不同于普通的格式化…...

从SQL到领域语言:我是如何用Antlr4在IDEA里“造”了一个简易查询引擎的

从SQL到领域语言:用Antlr4构建定制化查询引擎的实战之旅 当业务逻辑复杂到SQL语句难以直观表达时,或许该考虑为你的领域设计一门专属查询语言了。去年在重构电商订单系统时,我面对诸如"找出最近30天退货率高于15%的商家,且这…...

别再让无人机‘炸机’了!手把手教你用BB响设置3.6V安全报警值(附常见误区)

无人机电池安全守护者:BB响3.6V报警值设置全攻略 户外飞行时最令人心惊的瞬间莫过于无人机突然断电坠落——这种被称为"炸机"的意外,往往源于对电池电压的误判。而一个售价不足20元的小工具BB响,却能成为你飞行安全的最后防线。本文…...

从硬接线到软报文:GOOSE通信如何重塑变电站的“神经网络”?

从硬接线到软报文:GOOSE通信如何重塑变电站的“神经网络”? 在电力系统自动化领域,变电站的通信架构正经历着一场静默却深刻的革命。十年前,走进一座110kV变电站的控制室,映入眼帘的是密密麻麻的电缆沟和纵横交错的二次…...

Android串口开发避坑实录:绕过系统签名,用‘山寨’SerialPort类实现读写

Android串口开发实战:巧用类加载机制绕过系统签名限制 在物联网和嵌入式开发领域,串口通信一直是硬件交互的基石。当我们需要在Android设备上实现与各类传感器、控制器或传统工业设备的通信时,串口往往是最直接的选择。然而,Andro…...

量子计算中逻辑量子比特映射优化策略

1. 量子计算中的逻辑量子比特映射挑战量子计算正从嘈杂的中等规模量子(NISQ)时代向容错量子计算(FTQC)时代迈进。在这个过程中,逻辑量子比特的映射问题变得尤为关键。与NISQ设备不同,FTQC架构通常采用模块化…...

JIRA项目创建实战指南:从模板选择到团队协作的快速上手

1. 为什么你需要这篇JIRA项目创建指南? 第一次打开JIRA时,我完全被那些专业术语搞懵了。Scrum、Kanban、项目管理、任务管理...每个模板看起来都很相似,但又似乎有微妙的区别。作为项目经理,选错模板意味着后续要花大量时间调整工…...

告别RPi.GPIO!用GPIO Zero库5分钟搞定树莓派LED和按键控制(Python3保姆级教程)

树莓派GPIO革命:用GPIO Zero实现优雅的硬件交互开发 在树莓派生态中,硬件交互一直是开发者最关注的核心能力之一。传统RPi.GPIO库虽然功能强大,但其底层操作方式往往让开发者陷入繁琐的引脚管理和状态维护中。GPIO Zero库的出现彻底改变了这一…...

基于MCP协议构建LLM邮件助手:lettr-mcp项目实战与安全配置指南

1. 项目概述:一个为LLM开启“读信”能力的MCP服务器 如果你正在开发一个基于大语言模型(LLM)的智能体,并且希望它能帮你处理电子邮件,比如自动分类、总结、回复,或者从收件箱里提取特定信息,那…...

从零开始:使用USBASP编程器为Atmega328P芯片烧录Arduino Bootloader

1. 认识Bootloader与硬件准备 当你拿到一块全新的Atmega328P芯片时,它就像一张白纸,没有任何程序。这时候就需要Bootloader——这个小程序相当于芯片的"启动管家",负责接收来自Arduino IDE的程序指令。我刚开始玩Arduino时也纳闷&a…...

AI Agent技能集:自动化社交媒体多平台发布的技术实现与实战

1. 项目概述:一个为AI编码助手打造的跨平台社交媒体自动化发布技能集 如果你和我一样,是个独立开发者、内容创作者或者小团队的运营,每天最头疼的事情之一,可能就是“多平台发布”。一个产品更新、一篇技术文章,需要同…...

给大一新生的智能车竞赛避坑指南:从K60选型到PID调参,我的踩坑实录

给大一新生的智能车竞赛避坑指南:从K60选型到PID调参,我的踩坑实录 第一次接触智能车竞赛时,我和大多数新生一样充满热情却手足无措。记得当时为了赶进度,直接跳过了基础测试环节,结果一块价值300元的K60开发板在通电瞬…...

PHP接入Bing AI:非官方库实现聊天与图像生成功能详解

1. 项目概述:一个让PHP应用接入Bing AI的“瑞士军刀” 如果你正在用PHP做项目,又眼馋ChatGPT和DALL-E这类AI能力,但不想去折腾复杂的OpenAI API或者被网络环境卡脖子,那今天聊的这个工具可能正对你的胃口。 maximerenou/php-bin…...

5分钟彻底告别乱码!GBKtoUTF-8编码转换终极指南

5分钟彻底告别乱码!GBKtoUTF-8编码转换终极指南 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 还在为Windows和Mac之间文件传输乱码而烦恼吗?GBKtoUTF-8编码转…...

AMD Ryzen处理器底层调试:SMU Debug Tool如何解决性能调优的复杂性?

AMD Ryzen处理器底层调试:SMU Debug Tool如何解决性能调优的复杂性? 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table…...

CCGram:基于tmux与Telegram的远程AI编程助手控制方案

1. 项目概述:用手机遥控你的AI编程助手作为一名常年和终端、AI编程工具打交道的开发者,我经常遇到一个尴尬的场景:在本地终端启动了一个Claude Code或者Codex CLI会话,正和AI助手热火朝天地讨论代码重构方案,突然需要离…...

为什么你的Ansys在Linux上总装不上?聊聊版本、系统与‘和谐包’的兼容性玄学

为什么你的Ansys在Linux上总装不上?版本、系统与兼容性的深度解析 在工程仿真领域,Ansys作为行业标杆软件,其Linux版本安装却常常成为技术人员的噩梦。不同于Windows环境下相对标准化的安装流程,Linux平台上的Ansys安装更像是一场…...

从零搭建智能视频分析系统:DeepCamera开源框架全解析

1. 项目概述:当摄像头遇见AI,一个开源项目的诞生几年前,我在为一个社区安防项目选型时,遇到了一个非常典型的问题:市面上成熟的智能摄像头方案要么是闭源的“黑盒”,数据安全存疑;要么价格高昂&…...

从‘特征图侦探’视角看MaxPool2D:你的CNN到底通过池化‘忘记’了什么?

从‘特征图侦探’视角看MaxPool2D:你的CNN到底通过池化‘忘记’了什么? 在计算机视觉领域,卷积神经网络(CNN)的成功很大程度上依赖于其层次化特征提取能力。而在这个特征提取的流水线上,池化层扮演着至关重要的角色——它像一位严…...

Sloppy开发哲学:在可控范围内拥抱不完美,加速软件交付

1. 项目概述:一个“不完美”但高效的开发哲学在软件开发的日常里,我们常常被“完美主义”所困。每一次代码提交都力求优雅,每一个功能设计都追求极致,每一次重构都希望一劳永逸。但现实往往是,在快速迭代的业务需求面前…...

你的电动车换挡逻辑够‘聪明’吗?深入聊聊AMT控制器里的那些‘小心思’

你的电动车换挡逻辑够‘聪明’吗?深入聊聊AMT控制器里的那些‘小心思’ 当你在城市拥堵路段频繁启停时,是否注意到电动车的换挡响应比传统燃油车更加细腻?这背后是AMT(自动机械变速器)控制器在默默执行一套复杂的决策算…...

告别转换失败!深度解析Allegro PCB导入PADS报错的5个常见原因及解决方法

Allegro转PADS报错全攻略:从底层原理到精准排错 最近在开源硬件社区看到一个典型案例:某团队将Allegro设计的六层工业控制板导入PADS时,反复出现"Allegro未做好迁移准备"的报错,导致项目延期两周。这让我想起五年前第一…...

轻量级网络实战解析:从零构建MobileNetV3-Large核心模块

1. MobileNetV3-Large设计哲学解析 第一次接触MobileNetV3时,最让我惊讶的是它在保持轻量化的同时还能提升精度。这就像用自行车发动机跑出了摩托车的速度,背后是Google团队对移动端算力限制的深刻理解。MobileNetV3-Large作为该系列第三代产品&#xff…...

从原理图到代码:XPT2046触摸驱动芯片的“省电模式”与“中断唤醒”实战配置指南

XPT2046触摸驱动芯片的低功耗设计与中断唤醒实战指南 在便携式医疗设备、工业手持终端和智能家居控制面板等电池供电场景中,系统功耗直接决定了产品的用户体验和市场竞争力。XPT2046作为一款集成12位ADC的电阻触摸屏控制器,其特有的省电模式和中断唤醒机…...

如何快速掌握NPYViewer:面向新手的NumPy数组可视化完整实战指南

如何快速掌握NPYViewer:面向新手的NumPy数组可视化完整实战指南 【免费下载链接】NPYViewer Load and view .npy files containing 2D and 1D NumPy arrays. 项目地址: https://gitcode.com/gh_mirrors/np/NPYViewer 还在为NumPy二进制文件无法直接查看而烦恼…...

基于MCP协议构建AI钱包助手:安全架构与Claude集成实践

1. 项目概述:一个钱包的MCP服务器意味着什么?最近在折腾AI智能体开发,特别是围绕Claude Desktop这类工具构建个人工作流时,我遇到了一个高频痛点:如何让AI助手安全、可控地访问我的链上资产信息,或者执行一…...

Qt QColor实战:从基础调色到界面美化的完整指南

1. QColor基础:从RGB到HSV的调色入门 第一次用QColor调色时,我盯着RGB三个参数发呆了半小时——明明想调出薄荷绿,结果调出来的颜色总像发霉的抹布。后来才发现,掌握颜色模型就像学做菜要先认识调料,这是Qt界面美化的第…...

Verilog仿真验证入门:用HDLbits的Finding bugs练习巩固你的代码审查能力

Verilog仿真验证实战:用HDLbits代码审查训练验证工程师思维 在数字IC设计领域,写出能综合的RTL代码只是第一步,真正的挑战在于确保代码在各种边界条件下都能正确工作。许多初学者往往把注意力集中在功能实现上,却忽略了同样重要的…...

Windows Cleaner:5分钟彻底解决C盘爆红问题的免费开源终极方案

Windows Cleaner:5分钟彻底解决C盘爆红问题的免费开源终极方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到电脑C盘空间不足的烦恼&…...