C++的内存管理

我们所说的内存本质上可以理解为资源,由操作系统管理,我们能做的就是申请与释放

申请与释放就是内存管理。

如何申请和释放内存呢?

这里用到两个运算符:

new  申请

delete 释放

申请一个内存:

定义一个指针,用指针来接受new运算符申请到的内存

浦】

申请一块内存

int *arr=new int[10];//申请块内存

delete [ ]arr;释放块内存

内存操作注意事项:

1.内存管理方式:

2.申请内存判断成功,以及释放内存:

int *p =new int[100];

if(p==NULL){

  //内存分配失败

}

delete [ ] p;

p=NULL;

int *p=new int ;

if(p==NULL){

  //内存分配失败

}

delete p;

p=NULL;为什么最后还要给p赋值空指针呢?

如果不置为空,则指针还指向内存,如果我们在再delete一次,则表明同一块内存被同时被回收两次,则会出现异常。

例子:

#include<iostream>

using namespace std;

int main(void){

  int *p=new int(100);//申请100个地址空间

  if(p==NULL){

    exit 0;//分配失败

  }  

  p[0]=20//因为是块内存,采用数组访问

  cout<<p[0]<<endl;

  delete [ ]p;//如果没有[ ]表明之释放了一个内存

  p=NULL;

  system("pause");

  return 0;

}

练习:

在堆中申请100个char类型的内存,拷贝Hello world字符串到分配的堆中的内存中,打印字符串,最后释放内存

#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
    //在堆中申请100个char类型的内存
    char *str = new char[100];
    //拷贝Hello C++字符串到分配的堆中的内存中
    strcpy(str, "Hello world");
    //打印字符串
    cout<<str<<endl;
    //释放内存
    delete []str;
    str=NULL;
    return 0;
}

原文地址:https://www.cnblogs.com/shamoguzhou/p/7080954.html