zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    修改微信电脑版的字体
    今天把自己的ocr镜像开源了
    写点恐怖小说为自己打call
    分享一波目前写的最强的autohotkey 插件
    分享一个我改进过的ocr算法
    从git源码安装zabbix-agent
    windows bat更改系统时间 & 同步internet时间
    Jmeter执行多条Mysql语句报错
    性能测试图片总结
    Jmeter beanshell 生成手机号加密签名
  • 原文地址:https://www.cnblogs.com/shamoguzhou/p/7080954.html
Copyright © 2011-2022 走看看