C++ 动态分配内存

C++动态分配三级指针的内存与释放 找了很多关于C++指针这一块中动态内存分配与释放相关的回答,一般都是介绍了关于一维和二维的介绍,在朋友帮助下,搞定了一个三级指针的demo,和大家分享一下,希望可以对读者朋友有所帮助~ 以下是demo:   #include using namespace std ; int main() {  int w, h, d;  int ***array;  //int w = 10 阅读详情

静态方法:变量所占的内存空间不需要程序员自己管理,编译器在编译阶段自动将管理这些空间的代码加入到目标文件中,程序运行时,由操作系统自动为变量分配内存单元,在变量的生存期内,变量一直占用内存单元,在生存期结束后自动释放内存单元。特点是大小固定,不能扩展。

问题:有些程序必须在运行时才能确定需要多少内存空间来存储数据...

解决:使用动态分配内存方法。


动态分配内存:程序运行时根据当前指令随时为存储数据分配内存空间,完全由程序员自己进行内存的分配和释放。在堆里面进行分配。


C语言:malloc()和free()对

C++语言:new()和delete()对


new用法:new运算返回所分配内存单元的起始地址,所以需要把返回值保存在一个指针变量中。若分配不成功,返回NULL,并抛出异常。

<指针变量> = new <数据类型>

<指针变量> = new <数据类型> [整型表达式]

<指针变量> = new <数据类型>(<初始值>) 【PS这里应该是对象构造函数的方式,比如 int (10), string(10,'9'), 如果是自己定义的结构体或者类类型,按照定义的构造方法来初始化 】


例:

int *p1 = new int;
float *p2 = new float;

char *pBuffer = new char[100];
int *pA = new int[size];
student *stu = new student[num];

int *pNum = new int(100);

要注意的是,new没有为创建的对象命名,只能通过指针去访问对象或者数组。


delete: 

delete <指针变量>

delete []<动态分配的数组名>

例:

delete pNum;
delete []pBuffer;

PS: new和delete必须配对使用。虽然程序结束后系统会自动释放程序和其中数据所占的内存空间,但是为了在程序运行过程中能够重复使用有限的内存资源,防止系统产生内存泄漏,还是应该即时释放不需要的动态分配的内存单元,以便系统能随时对该内存单元进行分配。

delete只是释放内存,销毁内存上的对象,但是指针还是还存在的,并且仍然指向原来的内存,也就是指针的值还是内存的地址。指针是一个变量,只有程序结束时才被销毁。只不过现在指针指向的内容是是未定义的,所以说是垃圾【所谓的迷途指针】。所以释放内存后把指针指向NULL,也就是不指向任何内存,防止指针在后面不小心又被解引用了从而引发问题。


malloc/free VS new/delete

new运算不需要进行强制类型转换,使用简单方便;

new运算是通过调用构造函数初始化动态创建的对象,执行效率更高;

使用new能够进行异常处理,使用更安全。

更详细的区别见另一篇博客:malloc和new区别


需要注意的问题

1. 如果你在函数上面定义了一个指针变量,然后在这个函数里申请了一块动态分配的内存让指针指向它。实际上,这个指针的地址是在上,但是它所指向的内容却是在上面。这一点要注意!所以,在一个函数里申请了空间后,比如:

// code... 
void Function(void) 
{ 
      char *p = (char *)malloc(100 * sizeof(char)); 
}
千万不要认为函数返回,函数所在的栈被销毁指针也跟着销毁,申请的内存也就一样跟着销毁了。这是错误的。因为申请的内存在堆上,除非程序员手动释放,否则要等到程序结束释放所有内存才会释放它们,跟函数是否结束没有关系。也就是函数所在的栈被销毁跟堆完全没有关系。所以,忠告就是:使用完不再需要记得释放动态分配的内存!在该部分程序退出之前释放内存并立即给P赋0值(NULL)。另一个办法是保证P在没有初始化之前,将不再被使用。

Autosar Os降低CPU负载的方案总结 由于各个项目的实际场景不尽相同,可能需要有针对性的对症优化。如果你还有别的一些优化手段欢迎留言交流。 阅读详情

相关推荐

IFRS 9与CECL对比解析:跨国企业财务必须掌握的两种信用损失模型

本文深度解析IFRS 9与CECL两种信用损失模型的差异,帮助跨国企业应对财务合规挑战。从基础架构、数据治理到监管策略,详细对比三阶段模型与单一阶段模型的核心区别,并提供实施双轨制的实务建议,助力企业优化资本管理和税务筹划。

3c4x5z6v7b的博客 619

C++ | 动态内存分配

关于malloc与new的区别1、malloc free等为函数,而new、delete为操作符2、malloc不会初始化,而new可以初始化3、malloc需要计算类型大小,new只需传数据类型4、malloc返回值需强转,new不需要5、malloc失败时返回NULL,而new是抛异常6、malloc只会申请空间,而new则还会调用构造。

Nice_W的博客 2416

YOLOv8行人跌倒检测+训练好的模型+pyqt界面+数据集

1、yolov8行人摔倒检测,包含训练好的行人摔倒检测权重,以及PR曲线,loss曲线等等,在一千多张行人摔倒检测数据集中训练得到的权重,有pyqt界面,目标类别为fall 共1个类别,并附1000多张行人摔倒检测数据集,标签格式为txt和xml两种,分别保存在两个文件夹中2、pyqt界面可以检测图片、视频、调用摄像头3、数据集和检测结果参考:https://blog.csdn.net/zhiqingAI/article/details/1242307434、采用pytrch框架,python代码

C++篇】C++动态分配内存

知识点内容正确性以C++ Primer(中文版第五版)、C++ Primer Plus(中文版第六版)为标准,同时参考其它各类书籍、优质文章等,总结归纳出个人认为较有逻辑的整体框架,以至减少知识点上的错误,同时方便本人的基础复习,也希望能帮助到大家最好的好人,都是犯过错误的过来人;一个人往往因为有一点小小的缺点,将来会变得更好。如有错漏之处,敬请指正,有更好的方法,也希望不吝提出。最好的生活方式就是和努力的大家,一起奔跑在路上。

陈七的博客,学习知识分享,期待与大家的交流 5321

动态内存分配

数组元素存储在内存中连续的位置,当数组被声明时,他所需要的内存在编译时就会被分配。动态内存分配指的是在程序运行时为它分配内存

qq_53801896的博客 1301

C语言 - 动态内存分配

malloc calloc relloc free 动态申请内存

good good study, day day up! 5537

[C++] 动态内存分配

C++ 动态内存分配

weixin_60479183的博客 4607

C++动态分配内存知识点!

C++动态分配内存知识点喔~关注主播不迷路喔~

PingdiGuo_guo的博客 1万+

C++动态分配内存

本文默认已有C语言基础,理解内存分区,掌握malloc、calloc、realloc、free等C语言中的动态内存操作函数。

椰萝Yerosius,开源运动支持者,主要研究计算机科学、人工智能、Linux系统、数据结构与算法。 204

C++内存动态分配及管理

本文探讨C++内存的分配及管理策略。

牧秦丶 1574

C++动态分配后的内存释放

最近在用C++写项目时遇到的一些动态分配上的易错点,所以写这篇博客来记录下。下面我会列举一些问题作为例子来总结一下动态分配的易错点,如有不对,欢迎指正。 我们经常会在一个函数中对指针进行动态分配动态分配伴随着释放,不及时释放分配的内存会造成内存泄漏,那么我们应该什么时候在哪里释放已经分配的内存呢? 作用域结束后释放 常见的情况是在函数中动态分配了一个指针,我们在函数作用域结束时释放该指针,防止内...

BLoneliness的博客 1238

cpp内存动态分配,new与delete

【代码】cpp内存动态分配,new与delete。

m0_73477441的博客 707

c++ 动态分配内存

是一个运算符,用于在堆上动态分配内存,并返回指向新分配的内存的指针。运算符分配的内存,需要手动释放以防止内存泄漏。

qq_27390023的博客 392

C++ 内存管理】静态分配和动态分配

动态分配和静态分配概念;🖊②析构函数的调用顺序;🖊③new [] 为什么要多开内存呢?

Hou_lang_LJ的博客 731

C++动态分配内存空间

动态分配内存空间 new和delete运算符是用于动态分配和撤销内存的运算符。 new 1.开辟单变量地址空间 一般使用格式: 格式1:指针变量名=new 类型标识符; 格式2:指针变量名=new 类型标识符(初始值); 格式3:指针变量名=new 类型标识符 [内存单元个数]; 说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。例如: new int; //开辟一个存放整数

m0_65907460的博客 5171

C++ 指针动态分配内存

#include<iostream> using namespace std; //void someFunction(){ // int nNumber; ////让指针指向nNumber //pPointer = &nNumber; //} //在main中调用这个函数的话,是输不出25的 //这个函数,结束后nNumber被删除掉了 //因为他是局部变量,局部变量在定义它的函数执行完后都会被系统自动删掉 //因此需要动态分配技术 int *pPointer; voi

fly_ship的博客 1241

C++】(十四)动态分配内存

动态分配内存 1 new与delete运算 在使用数组的时候,总有一个问题困扰着我们: 数组应该有多大? 而如下操作是错误的: int n; cin>>n; //输入n值 double A[n][n]; //意图由输入n值确定数组大小 C++内存分配有两种方式:静态分配和动态分配。 静态分配指在编译时为程序中的数据对象分配相应的存储空间,变量、数组、指针定义等均是静态分配方式。 由于是在编译时为数据对象分配存储空间,因此就要求在编译时空间大小必须是明确的,所以数组的长度必须是常量。而一旦编译

weixin_44378835的博客 977

C++ 动态分配内存|动态数组

使用new int时,需要注意在不再需要使用该内存空间时,使用delete释放该内存空间,以避免内存泄漏。对于每个元素,我们使用new int[2]语句,分配了一个大小为2的int数组,并将其赋值给arr[i]。最终,我们得到了一个二维数组arr,它包含了n个大小为2的整数数组。以上代码是用C++动态分配了一个二维数组arr,其中arr是一个指向int指针的指针,n是一个整数。首先,通过new int* [n]语句,我们分配了一个大小为n的int指针数组,将其赋值给arr。

记录计算机学习路程 741

C/C++动态分配内存的几种方法

使用C/C++编程时,会经常开辟内存空间,以便动态合理使用内存,本文主要讲述开辟内存空间的几种方法及一些原理,理解不深刻之处欢迎各位指正。 概述 需要用到头文件<stdlib.h> malloc calloc realloc new free ...

qq_39686950的博客 1万+
上一篇: C++ 函数作用域
下一篇: malloc和new区别
ForestRound
博客等级 码龄12年 30粉丝 76原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值