动态分配内存new和delete

news/2024/11/28 21:00:14/

动态分配内存new和delete

栈:存储局部变量、函数参数和返回值。
栈区的效率很高,但是空间很小,如果需要处理大量的数据,就必须使用堆区的内存

动态分配内存new和delete
使用堆区的内存有四个步骤:
1)声明一个指针;
2)用new运算符向系统申请一块内存,让指针指向这块内存;
3)通过对指针解引用的方法,像使用变量一样使用这块内存;
4)如果这块内存不用了,用delete运算符释放它。
申请内存的语法:new 数据类型(初始值); // C++11支持{}

如果申请成功,返回一个地址;
如果申请失败,返回一个空地址(暂时不考虑失败的情况)。

释放内存的语法:delete 地址;
释放内存不会失败(还钱不会失败)。
注意:

  • 动态分配出来的内存没有变量名,只能通过指向它的指针来操作内存中的数据。
  • 如果动态分配的内存不用了,必须用delete释放它,否则有可能用尽系统的内存。
  • 动态分配的内存生命周期与程序相同,程序退出时,如果没有释放,系统将自动回收。
  • 就算指针的作用域已失效,所指向的内存也不会释放。
  • 用指针跟踪已分配的内存时,不能跟丢。

二级指针

指针是指针变量的简称,也是变量,是变量就有地址。
指针用于存放普通变量的地址。
二级指针用于存放指针变量的地址。
声明二级指针的语法:数据类型** 指针名;
使用指针有两个目的:1)传递地址;2)存放动态分配的内存的地址。
在函数中,如果传递普通变量的地址,形参用指针;传递指针的地址,形参用二级指针。
把普通变量的地址传入函数后可以在函数中修改变量的值;把指针的地址传入函数后可以在函数中指针的值。
#include
using namespace std;

//使用堆区的内存有四个步骤:
//1)声明一个指针;
//2)用new运算符向系统申请一块内存,让指针指向这块内存;
//3)通过对指针解引用的方法,像使用变量一样使用这块内存;
//4)如果这块内存不用了,用delete运算符释放它。

实例:


```cpp
void func(int **pp)
{*pp = new int(30);//对**pp一级解引用就是p_acout << "pp=" << pp << "\n*pp=" << *pp << endl;}int main()
{//动态分配出来的内存没有变量名,只能通过指向它的指针来操作内存中的数据。/*int *p = new int(5);cout << "*p=" << *p << endl;*p = 8;cout << "*p=" << *p << endl;delete p;int i = 8;cout << "i=" << i<<"     i的地址="<<&i<< endl;int *p_i = &i;cout << "*p_i=" << *p_i << "     p_i的地址=" << p_i << endl;int **pp_i = &p_i;cout << "**pp_i=" << *pp_i << "     pp_i的地址=" << pp_i << endl;*/int *p_a=0 ;//初始值//cout << "*p_a=" << *p_a <<"p_a的地址"<<p_a<< endl;//在函数中分配内存,并且把指针变量p_a的地址传递给函数func(&p_a);cout << "*p_a=" << *p_a << endl;system("pause");
}

http://www.ppmy.cn/news/96074.html

相关文章

网络规划与设计实验+配置案例报告+pkt

目录 第一部分&#xff1a;网络规划与设计实验..... 7 实验一 用户需求分析报告的撰写... 7 一、实验目的和要求... 7 二、实验内容... 7 三、实验步骤... 7 3.1 项目背景... 7 3.1.1 信息化发展趋势... 7 3.1.2 学校基本情况介绍... 8 3.1.3 学校对网络建设的基本要求…

Full-Scanner是一个多功能扫描工具,支持被动/主动信息收集,漏洞扫描工具联动,可导入POC和EXP

github项目地址&#xff1a;https://github.com/Zhao-sai-sai/Full-Scanner gitee项目地址&#xff1a;https://gitee.com/wZass/Full-Scanner 工具简介 做挖漏洞渗透测试有的时候要去用这个工具那个工具去找感觉麻烦我自己就写了一个简单的整合工具&#xff0c;有互联网大佬不…

Seata之@GlobalTransactional验证

下订单 -> 减库存 -> 扣余额 -> 改&#xff08;订单&#xff09;状态 1.数据库初始情况&#xff1a; 2.正常下单 http://localhost:2001/order/create?userId1&productId1&count10&money100 3.超时异常&#xff0c;没加GlobalTransactional 模拟Accou…

当下的程序员该如何面对复杂的就业坏境

已经2023年了&#xff0c;我们都知道现在开发趋向于年轻化&#xff0c;大部分都是90后、95后&#xff0c;毕竟&#xff0c;软件开发不像硬件开发一样&#xff0c;年限越高&#xff0c;相对来说越吃香。 31岁,前端工程师&#xff0c;工作经历8年&#xff0c;7年左右都在外包公司…

什么是C语言?

C语言是一种高级编程语言&#xff0c;于1972年由Dennis Ritchie在贝尔实验室开发出来。它是一种通用的、结构化的编程语言&#xff0c;被广泛用于系统软件、嵌入式系统、游戏开发以及科学计算等领域。 C语言的设计目标是提供一种简洁、高效、可移植的编程语言&#xff0c;以便…

Spring 事件相关知识ApplicationEvent

Spring 事件相关知识ApplicationEvent 事件工作流程相关类ApplicationListenerApplicationEvent 我们可以发布自己的事件ApplicationEventPublisher Spring框架中提供了多种事件类型&#xff0c;常用的几个事件类型如下&#xff1a; Spring 事件驱动模型是 Spring 框架中的一个…

SQL查询语言(3) 嵌套查询

如果不进行去重可能会出现一个情况 嵌套查询根据子查询的结果是否依赖于外层循环,分成相关子查询和不相关子查询 分类 IN 笔者总结&#xff1a;一般这种方法适用于查找有共性的元组&#xff0c;同一类事物比如查找和elsa选修相同科目的学生/选修相同科目的女同学。在后面我…

生成对抗性网络简介

生成对抗性网络简介 1. 原理1. GANs如何工作2. GAN架构3. 培训GAN4. 艺术家与评论家5. 评估指标6. GAN变体7. GAN应用8. 图像合成(Image synthesis)9. 图像到图像的转换(Image-to-image translation)10. 文本到图像(Text-to-Image)11. 超越图像12. 其他GAN应用参考这篇博…