动态内存管理
动态内存的管理
C++中除了兼容C的管理方式外,还额外提供了两个运算符(不是函数)来管理动态内存:
- new 主要用于申请动态内存
- delete 主要用于释放动态内存
Note:
- 运算符VS函数,运算符不需要找库,直接被编译器内部支持
- 将指针置为空指针可以避免多次delete所引起的core dumped的错误信息
例子1
使用new运算符实现定位分配
#include<iostream> using namespace std; int main(void){ short buf[2]={0}; //在stack区申请了4byte大小的空间 //pi指向堆区,pi本身在栈区 int* pi=new int(66); cout<<"*pi="<<*pi<<endl; //66 delete pi; pi=NULL; //使用new运算符实现定位分配的效果 pi=new(buf)int(0x12345678); //delee\te pi;segmentatiob c }
例子2
定义二维数组的首地址:
int (*ai)[3]=new int[2][3]; for(int i=0;i<2;i++){ for(int j=0;i<3;j++) cout<<"ai["<<i<<"]["<<j<<"]"<<ai[i][j]<<endl; } delete[] ai; // 连续的调用析构
Note:
- malloc()申请的动态内存,free()释放,new 申请的动态内存, delete释放,切记不要交叉使用
- 二维数组的首地址是第一个元素的地址,所以应该使用一级指针接收,绝不能用二级指针!!!
相关推荐
qingsongzdq 2020-05-01
zuixin 2020-04-19
qscool 2019-12-19
qscool 2019-10-27
此处省略三千字 2012-03-03
ddsdevgroup 2012-06-03
宁静致远 2010-05-01
小南地带 2019-06-29
Web前端成长之路 2019-06-28
小小小石头 2014-11-02
KevinstuInfo 2019-04-18
isjun 2017-05-13
爱读书的旅行者 2018-05-16
zhangcsdntest 2016-10-06
qiaosym 2015-11-26
zhuimuzhuimu 2012-01-01
gcqcc 2017-01-24
揅笑晏晏 2016-08-14
ShadowBurn 2016-08-04