动态内存管理

编程爱好者联盟 2016-09-30

动态内存的管理

C++中除了兼容C的管理方式外,还额外提供了两个运算符(不是函数)来管理动态内存:

  • new 主要用于申请动态内存
  • delete 主要用于释放动态内存

Note:

  1. 运算符VS函数,运算符不需要找库,直接被编译器内部支持
  2. 将指针置为空指针可以避免多次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:

  1. malloc()申请的动态内存,free()释放,new 申请的动态内存, delete释放,切记不要交叉使用
  2. 二维数组的首地址是第一个元素的地址,所以应该使用一级指针接收,绝不能用二级指针!!!

相关推荐