动态内存分配
Posted tushukai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态内存分配相关的知识,希望对你有一定的参考价值。
动态内存分配
在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;//注意:释放操作只能做一次,这句话很可能导致你的程序异常。
以上是关于动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章