码迷,mamicode.com
首页 > 其他好文 > 详细

动态内存分配

时间:2019-07-30 23:22:20      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:表达式   异常   注意   数组   占用   导致   无法   class   类型   

动态内存分配

在c语言中,我们有malloc。 在C++ 中,我们用new。这种分配方式更、省、内、存!

第一种用法:

分配一个变量。

P = new T;

在这里,P是一个类型为 *T 的指针,T代表一个类型的名字。这句话的作用就是动态分配出一片大小为 sizeof ( T ) 字节的
内存空间。并将该内存空间的起始地址赋值给P。

举个栗子:

int *pn ;
pn = new int ;
*pn = 5 ;

第二种用法:

分配一个数组。

P = new T [N] ;

(历史总是惊人地相似) 同样的,T为任意类型名。 P是一个类型为T的指针。
不同的:N是要分配的数组元素的个数。 可以是整形表达式哦~~ 。
它的作用:动态分配出一片大小为 N
sizeof ( T ) 字节的内存空间,并将该内存空间的起始地址赋值给P。

举个栗子:

int *pn;
int i = 5 ;
pn = new int [ i * 20 ];
pn [0] = 20;
pn [100] = 30;//这句话的话,编译没问题,运行会RTE *数组越界。 因为他只申请了100个空间,在第pn[99]是最后一个

2

这个动态空间先申请,然后用。但用完了之后也不能不去管它。用完后必须把它释放掉。这时,就轮到我们的 delete 函数出场。如果不释放,你占用的空间就一直在那里。最要命的一点事,别的程序无法使用它。如果你一直申请下去,一直不释放,那你就刺激了。最终有可能导致操作系统的内存空间不够用。你系统就这么炸了。

写法:

delete +指针 // 指针必须指向动态分配的空间

具体的例子:

int *P= new int;
* p = 5;
delete p;//到此,一切正常
delete p;//注意:释放操作只能做一次,这句话很可能导致你的程序异常。

动态内存分配

标签:表达式   异常   注意   数组   占用   导致   无法   class   类型   

原文地址:https://www.cnblogs.com/tushukai/p/11273360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!