动态内存分配

1、C++中用new运算符实现动态内存分配

  • 第一种用法:分配一个变量
    • T *P=new T; 动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。
      • T:任意类型名
      • P:类型为T * 的指针
    eg:
    int * pn;
    pn = new int;
    *pn = 5;    //通过pn向刚才动态分配出的空间里写了一个5
    
  • 第二种用法:分配一个数组
    • T *P=new T[N]; 动态分配出一片大小为N*sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。
      • T:任意类型名
      • P:类型为T * 的指针
      • N:要分配的数组元素的个数,可以是整型表达式。
    int * pn;
    int i = 5;
    pn = new int[i * 20];
    pn[0] = 20;
    

注意:new运算符(new T; new T[n];) 返回值的类型,都是T*。这样 int * p = new int; 两边类型才能匹配。

2、用delete运算符释放动态分配的内存

用“new”动态分配的存储必须通过“delete”运算符进行释放。否则这一部分存储空间会一直被程序占用,成为内存的垃圾碎片,操作系统就不能把这一部分存储空间交给别的应用程序使用,如果程序总是反复地动态分配存储空间却总不释放的话,那程序占用的内存空间就会越来越多,最后就会导致操作系统或者其他应用程序的内存空间不够,导致系统崩溃或特别慢。

  • 语句1:delete 指针; //该指针必须指向new出来的存储空间。
int * p = new int;
* p = 5;
delete p;
delete p;    //异常,一片空间不能被delete多次
  • 语句2:delete [ ] 指针; //该指针必须指向new出来的数组。用delete释放动态分配的数组,要加[ ]。
int * p = new int[20];
p[0] = 1;
delete [] p;

视频地址:https://courses.edx.org/courses/course-v1:PekingX+04831750.1x+2015T1/courseware/2db913e6a4f245a28360e7ef8b84945f/7232357c324945f8b872a2d4d0d18a26/

results matching ""

    No results matching ""