动态内存分配

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;//注意:释放操作只能做一次,这句话很可能导致你的程序异常。

以上是关于动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章

动态内存分配

动态内存分配与静态内存分配

C++程序的内存分区,为什么要使用动态内存,动态内存的分配使用释放

动态内存分配(c语言)

c语言 动态内存规划

c语言 动态内存规划