其实在学C语言的时候,我们就已经用malloc函数去实现了,当然在C++里也有新的方法。
今天学习的是在C++环境下的动态内存的分配。
有这么两种用法:
1.分配一个变量
exp.
P=new T;
其中 T:任意类型名
P:类型为T*的指针
动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。
exp.
int *pn;
pn=new int;
*pn=5;
2.分配一个数组
exp.
P=new T[N];
其中 T:任意类型名
P:类型为T * 的指针
N:要分配的数组元素的个数,可以是整型的表达式
动态分配出一片大小为sizeof(T) * N字节的内存空间,并且将该内存空间的起始地址赋值给P。
exp.
int *pn;
int i=5;
pn=new int[i*20];
pn[0]=20;
pn[100]=30;//编译没有问题,运行时导致数组出界
delete指针:该指针必须指向new出来的空间
注意点首先:
1.用new动态分配的内存空间,一定要用delete运算符进行释放
exp.
int *p=new int;
*p=5;
delete p;
delete p;//导致异常,一个空间不能被delete多次
2.用“delete”释放动态分配的数组,要加[]
exp.
int *p=new int[20];
p[0]=1;
delete []p;
当初学C的时候就对动态内存分配这块的知识非常的不了解,希望在C++的学习中能对此有更深一层的认识与更熟练的应用。
原文:https://www.cnblogs.com/AirBirdDD/p/12240827.html