动态内存分配
- 动态内存分配:即由程序员手动的进行内存空间的分配、内存空间的释放的内存管理操作
- C++代码中,变量、数组等对象的创建,是由C++自动分配内存的,称之为(自动)静态内存分配
- (自动)静态内存管理,不会进行内存空间的自动清理。(无垃圾回收机制)
- 需要手动的管理内存,即手动分配,用完清理
new运算符#
- 用于申请并分配内存空间并提供指向该空间的指针(内存地址)
- 基本语法:
- new type 申请普通变量空间
- new type[] 申请数组空间
delete运算符#
- 用于释放内存,仅可用于new运算符申请的内存区域
- 基本语法:
- delete 指针 删除普通变量空间
- delete[] 指针 删除数组空间
- 建议:写完new后,立刻写delete,然后再写业务逻辑代码(避免忘记)
| int *pt = new int; |
| *pt = 10; |
| cout << "申请内存空间存放:" << *pt << endl; |
| delete pt; |
| cout << "pt内存空间已释放" << endl; |
| |
| int *pt2 = new int[3]; |
| pt2[0] = 1; |
| *(pt2 + 1) = 2; |
| |
| cout << "*pt2申请内存空间大小:" << sizeof(pt2) << endl; |
| cout << *pt2 << endl; |
| cout << pt2[1] << endl; |
| delete[] pt2; |
| cout << "pt2内存空间已释放" << endl; |
指针悬挂#
- 指针指向的区域已经被delete回收,这种称为:指针悬挂
- 如何避免:
- 不要轻易进行指针之间相互赋值
- delete回收空间之前,确保此空间100%不再被使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示