C++---动态内存分配 new delete

在C++中,new和delete 是用于动态内存分配和释放的关键字。


一.利用new创建内存🍗

new是在堆区申请一块连续的内存空间,如果申请成功,则返回内存指针;如果申请失败,则返回NULL;new申请内存空间的过程,通常称为new一个对象。与 malloc()相比:
1.new是关键字,不需要引用头文件(malloc需要引用stdlib.h或者malloc.h)
2.new创建动态对象时会自动调用对象的构造函数;
3.new能够根据初始化列表中的值进行初始化。

1.创建单个变量(对象)

数据类型 *指针变量 = new 数据类型;  //默认值为随机值
数据类型 *指针变量 = new 数据类型(初始值);
数据类型 *指针变量 = new 数据类型{初始值};
//动态创建基本类型对象(变量)
int main()
{int* p1 = new int;//这个没有初始化,随机值(0xcdcdcdcd)cout << *p1 << endl;int* p2 = new int();//写了初始化列表,没有给值默认为0cout << *p2 << endl;int* p3 = new int(100);//初始化为100cout << *p3 << endl;int* p4 = new int{200};//初始化为200(列表初始化的方式)cout << *p4 << endl;return 0;
}

2.创建数组

数据类型 *指针变量 = new 数据类型[数组长度];//没有初始化默认值是随机值
数据类型 *指针变量 = new 数据类型[数组长度]{初始化列表};
int main()
{int* p1 = new int[10];//创建10长度的int数组,都是随机值for (int i = 0; i < 10; i++)cout << p1[i]<<" ";cout << endl;int* p2 = new int[10] {1,2,3,4,5,6,7,8,9,10};//创建10长度的int数组,并初始化为1~10for (int i = 0; i < 10; i++)cout << p2[i]<<" ";cout << endl;int* p3 = new int[10] {1,2,3,4,5};//创建10长度的int数组,并初始化为1,2,3,4,5,0,0,0,0,0for (int i = 0; i < 10; i++)cout << p3[i] << " ";cout << endl;return 0;
}

二.利用delete释放内存🍗

用new运算符分配的内存在使用后要及时释放以免造成内存泄漏,C++提供了delete运算符释放new出来的内存空间,并自动调用其析构函数。格式如下:

delete 指针名;//释放单个的内存对象(变量)
delete []指针名;//释放申请的数组对象(变量)

delete有两种使用方式,需要配合new的方式使用:
1.如果new创建的是单个变量(对象),则使用delete 指针名;
2.如果new创建的是数组变量(对象),则使用delete []指针名;

#include <iostream>
using namespace std;
int main()
{int* p1 = new int;  //创建int,随机值,在vs2022中是-842150451(0xcdcdcdcd)int* p2 = new int(10);//创建int,初始化为10char* p3 = new char[10];//创建长度为10的char数组,随机值(在vs2022中是0xcd)char* p4 = new char[10] {"趣字节"};//创建长度为10的char数组,初始化为"趣字节"cout << *p1 << endl << *p2 << endl;cout << p3 << endl;cout << p4 << endl;delete p1;//释放p1指向的动态内存delete p2;//释放p2指向的动态内存delete[]p3;//释放p3指向的动态内存,是数组delete[]p4;//释放p4指向的动态内存,是数组return 0;
}

注意:
1.一定要配对的使用new和delete,否则出现内存泄漏;
2.不要多次释放同一段动态内存,C++标准指出,这样做的结果将是不确定的,这意味着什么情况都可能发生;
3.不能使用delete释放不是动态创建的内存;
4.对空指针使用delete是安全的。

int main()
{int* p1 = new int[5];delete p1;//错误1,使用new []分配,应该使用delete []p1;int* p2 = new int;int* p3 = p2;delete p2;delete p3;//错误2,多次delete同一段内存int arr[5];int* p4 = arr;delete p4;//错误3,delete不能释放非动态内存int* p5 = NULL;delete p5;//正确,delete 空指针是安全的delete NULL;//语法错误,这条语句没有意义return 0;
}

delete []中的方括号告诉程序,应释放整个数组,而不仅仅是指针指向的一个元素。如果使用new时,不带方括号,则使用delete时,不带方括号。如果使用new时带方括号,则使用delete时也应带方括号。对于C++标准来说,new和delete的格式不匹配导致的后果是不确定的。


本篇完.🍗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/441413.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…

linux 下gdal库(python)

之前在windows下安装gdal&#xff0c;先要下安装包再安装。这次在linux上安装&#xff0c;试了一下pip install gdal&#xff0c;不可以。想着linux应该一样&#xff0c;结果一搜网上教程一堆&#xff0c;乱七八糟的。 搞了一个小时 最后发现一句话就可以&#xff01;&#xf…

干货 | 大模型在图数据分析、推荐系统和生物科学中的综合应用

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 图机器学习、推荐系统与大语言模型的融合正成为新的前沿热点。图机器学习通过利用图结构数据&#xff0c;能够有效地捕捉和分析复杂关系和模式。同时&#xff0c;推荐系统正逐步成为我们日常生活的一部分&#…

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上&#xff0c;二层双机负载分担部署&#xff0c;交换机重定向引流 业务需求 如图1所示&#xff0c;两台交换机集群组网&#xff0c;两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层&#xff0c;也就是…

彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题

最近在编译一个比较老的项目&#xff0c;git clone 之后使用 async 之后出现一下现象&#xff1a; 首先确定是我网络本身是没有问题的&#xff0c;尝试几次重新 async 之后还是出现问题&#xff0c;网上找了一些方法解决了本问题&#xff0c;以此来记录一下问题是如何解决的。 …

设计模式-模块方法模式

资料来自黑马程序员 此系列全是帮忙宣传 模板方法模式 在面向对象程序设计过程中&#xff0c;程序员常常会遇到这种情况&#xff1a;设计一个系统时知道了算法所需的关键步骤&#xff0c;而且确定了这些步骤的执行顺序&#xff0c;但某些步骤的具体实现还未知&#xff0c;或者…

解密数据清洗,SQL中的数据分析

大家好&#xff0c;数据库表中的数据经常会很杂乱。数据可能包含缺失值、重复记录、异常值、不一致的数据输入等&#xff0c;在使用SQL进行分析之前清洗数据是非常重要的。 当学习SQL时&#xff0c;可以随意地创建数据库表&#xff0c;更改它们&#xff0c;根据需要更新和删除…

Ruff应用:打破传统,IoT技术赋能工业制造数字化转型之路

近年来&#xff0c;随着物联网、大数据、云计算、5G等数字技术的快速应用&#xff0c;工业制造领域正在经历着前所未有的变革。工业4.0时代&#xff0c;各种数字技术与工业制造的结合&#xff0c;不仅提高了工业生产效率、降低运营成本&#xff0c;更是极大地推动了传统工业数字…

HP Pavilion Gaming Laptop 15-cx0069tx,15-cx0075tx原厂Win10系统,恢复出厂OEM预装系统镜像

hp惠普光影精灵4笔记本电脑原装Windows10系统包 适用型号&#xff1a; 15-cx0052tx&#xff0c;15-cx0054tx&#xff0c;15-cx0058tx&#xff0c;15-cx0059tx&#xff0c;15-cx0065tx&#xff0c;15-cx0071tx&#xff0c;15-cx0074tx&#xff0c;15-cx0075tx等 链接&#xf…

React通用后台模板

一. 项目初始化 1. 创建项目 环境 npm init vite 打开package.json,参考以下各模块版本: "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^7.2.8", …

软件价值3-A*算法寻路

A*算法&#xff08;A-star算法&#xff09;是一种启发式搜索算法&#xff0c;主要用于在图或网络中找到从起始节点到目标节点的最佳路径。它结合了Dijkstra算法的广度优先搜索和贪婪最优优先搜索的特点&#xff0c;通过估算从起始节点到目标节点的代价来指导搜索方向。 A*算法…

【Go】微服务架构下实现etcd服务注册与服务发现

中心网关&#xff1a;gateway 四个微服务&#xff1a;user、message、note、relationship 1 中心网关实现服务发现 1.1 设计EtcdDiscovery类 package entityimport ("context""fmt"clientv3 "go.etcd.io/etcd/client/v3""gonote/gatewa…