编程学习-二维字符串数组的初始化-动态内存分配 动态内存分配 1
堆内存分配 : C/C++定义了 4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆 (heap)区或自由存储区(free store)
堆的概念: 通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的 大小,从而系统在适当的时候为他们分配确定的存储空间
这种内存分配称为静态存储分配; 有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运 行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配
所有动态存储分配都在堆 区中进行
当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存贮空 间,用于存贮该变量或对象
当不再使用该变量或对象时,也就是它的生命结束时,要显式释放它所 占用的存贮空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限的资源
堆内存的分配与释放 堆空间申请、释放的方法: 在 C++中,申请和释放堆中分配的存贮空间,分别使用 new和 delete的两个运算符来完成, 指针变量名 =new 类型名(初始化式); delete 指针名; 例如:1、 int *pi=new int(0); 它与下列代码序列大体等价: 2、int ival=0, *pi=&ival; 区别:pi所指向的变量是由库操作符new()分配的,位于程序的堆区中,并且该对象未命名
堆空间申请、释放说明: ⑴
new运算符返回的是一个指向所分配类型变量(对象)的指针
对所创建的变量或对象,都是通过 该指针来间接操作的,而且动态创建的对象本身没有名字
一般定义变量和对象时要用标识符命名,称命名对象,而动态的称无名对象(请注意与栈区中的临 时对象的区别,两者完全不同:生命期