zoukankan      html  css  js  c++  java
  • 动态内存分配

    动态内存分配

    在c语言中,我们有malloc。 在C++ 中,我们用new。这种分配方式更、省、内、存!

    第一种用法:

    分配一个变量。

    P = new T;
    

    在这里,P是一个类型为 *T 的指针,T代表一个类型的名字。这句话的作用就是动态分配出一片大小为 sizeof ( T ) 字节的
    内存空间。并将该内存空间的起始地址赋值给P。

    举个栗子:

    int *pn ;
    pn = new int ;
    *pn = 5 ;
    

    第二种用法:

    分配一个数组。

    P = new T [N] ;
    

    (历史总是惊人地相似) 同样的,T为任意类型名。 P是一个类型为T*的指针。
    不同的:N是要分配的数组元素的个数。 可以是整形表达式哦~~ 。
    它的作用:动态分配出一片大小为 N * sizeof ( T ) 字节的内存空间,并将该内存空间的起始地址赋值给P。

    举个栗子:

    int *pn;
    int i = 5 ;
    pn = new int [ i * 20 ];
    pn [0] = 20;
    pn [100] = 30;//这句话的话,编译没问题,运行会RTE *数组越界。 因为他只申请了100个空间,在第pn[99]是最后一个
    

    2

    这个动态空间先申请,然后用。但用完了之后也不能不去管它。用完后必须把它释放掉。这时,就轮到我们的 delete 函数出场。如果不释放,你占用的空间就一直在那里。最要命的一点事,别的程序无法使用它。如果你一直申请下去,一直不释放,那你就刺激了。最终有可能导致操作系统的内存空间不够用。你系统就这么炸了。

    写法:

    delete +指针 // 指针必须指向动态分配的空间
    

    具体的例子:

    int *P= new int;
    * p = 5;
    delete p;//到此,一切正常
    delete p;//注意:释放操作只能做一次,这句话很可能导致你的程序异常。
    
  • 相关阅读:
    P3368 【模板】树状数组 2
    P3374 【模板】树状数组 1
    BZOJ 2654
    BZOJ 1016
    BZOJ 4870
    BZOJ 4868
    BZOJ 1503
    P3379 【模板】最近公共祖先(LCA)
    雅礼2017国庆1-1
    使用 CefSharp 网页显示问题
  • 原文地址:https://www.cnblogs.com/tushukai/p/11273360.html
Copyright © 2011-2022 走看看