• 内存管理


    ---------siwuxie095

       

       

       

       

    C++内存管理:

       

    内存的本质,其实就是一种资源,是写程序时

    所用到的必需的一种资源

       

    这种资源由操作系统进行掌控,人所能做的就是申请

    和归还这种资源

       

    当需要时向操作系统申请内存资源,当用完后,就要

    把相应的资源再归还给操作系统,这样的一个过程就

    称之为内存管理

       

       

       

       

       

       

    内存的申请和释放:

       

    申请内存要使用运算符 new,释放内存要使用运算符 delete

       

    new 和 delete 是一种运算符,而不是函数

       

       

       

       

       

    具体使用方式:

       

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

       

    释放内存:delete 运算符后跟相应的指针即可

       

       

       

       

    上面只是申请和释放一个内存 或叫 某一个类型的内存,

    如果要申请和释放一块内存:

       

       

    注意:释放块内存时,delete 后要跟一个中括号,

    中括号后跟的是当时申请时使用的指针

       

    如果不加中括号,在释放时,只能释放 arr 指向的第一个内存,

    后面的 9 个内存都无法释放

       

       

       

    内存操作注意事项:

       

       

    在 C 语言中:

    使用 malloc 和 free 函数申请和释放内存,注意是函数,不是运算符

       

    〔malloc 全称:memory allocation〕

       

       

    而 C++:

       

       

    如果使用 new 来申请内存,必须要使用 delete 来释放

    如果使用 malloc 来申请内存,必须要使用 free 来释放

       

       

       

       

       

    申请内存注意事项:

       

    申请内存不一定会成功,有可能是附带风险的,因为操作系统

    现在的内存已经用完了,没有办法给你更多的内存

       

       

       

       

    那么在编码时就要对这种情况进行处理:

       

       

       

       

    释放内存注意事项:

       

       

       

    如:单个内存与块内存

       

       

    除了要判断申请内存时分配失败的情况外,在释放内存时

    也要注意匹配

       

    释放完内存后,要将相应的指针赋值 空,

    以避免很多莫名其妙的错误

       

    如果不置为 空,当前的指针还指向相应的那块内存,如果

    不小心又调用了一次 delete,就会使得同一块内存被重复

    回收,一旦被重复回收,计算机就会出现异常

       

       

       

    最后:

       

       

       

       

    程序:

       

    #include <stdlib.h>

    #include <iostream>

    using namespace std;

       

       

    //申请一个内存

    int main(void)

    {

    //在堆中申请内存

    int *p = new int;//也可以这样赋值 int *p=new int(20);

    if (NULL==p)//判断内存是否申请成功

    {

    system("pause");

    return 0;

    }

    *p = 20;

    cout << *p << endl;

    delete p;

    p = NULL;//将指针置于安全状态

    system("pause");

    return 0;

    }

       

    //申请块内存

    //int main(void)

    //{

    // int *p = new int[100];

    // if (NULL == p)

    // {

    // system("pause");

    // return 0;

    // }

    // p[0] = 10;

    // p[1] = 20;

    // cout << p[0] << "," << p[1] << endl;

    // delete []p;

    // p = NULL;

    // system("pause");

    // return 0;

    //}

       

    vs2013中:

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    深入浅出理解索引结构
    SQL数据库碎片检查DBCC SHOWCONTIG含义
    NHibernate和SqlImage
    C#中验证sql语句的方法 (SET PARSEONLY 与SET NOEXEC )
    Webbrowser控件判断网页加载完毕的简单方法
    如何将一个HTML页面嵌套在另一个页面中
    WCF REST Service: InstanceContextMode.PerCall 不管用,无法实现并发
    linux中修改ssh端口
    linux修改主机名(不重启)
    centos使用光盘作为本地的yum源
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6407045.html
Copyright © 2020-2023  润新知