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

  • 相关阅读:
    了解一些常用的牛逼编译器(不限制编程语言, 不限制平台)
    Linux下的常用文本编辑器
    linux下一些重要命令的了解
    linux学习笔记(二:权限)
    liunx学习笔记(一:常用命令)
    文件操作相关的函数总结
    关于动态内存malloc和realloc
    实现一个简易的通讯录
    qsort函数排序各种类型的数据。
    结构体总结
  • 原文地址:https://www.cnblogs.com/shamoguzhou/p/7080954.html
Copyright © 2011-2022 走看看