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;
    }

  • 相关阅读:
    std::type_index(转)
    __sync_fetch_and_add系列(转)
    InterlockedIncrement函数详解(转)
    如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?(转)
    Linux系统管理基础测试
    CentOS7.7源码包安装Cmake3.0
    Shell-三剑客(sed)
    问题-突然发现公司网站访问速度变的很慢很慢
    Linux基础命令之文件及目录管理
    Linux基础命令之进程管理
  • 原文地址:https://www.cnblogs.com/shamoguzhou/p/7080954.html
Copyright © 2011-2022 走看看