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

    如果我们需要内存大小为一个变量,其数值只有在程序运行时 (runtime)才能确定

    动态内存分配(dynamic memory),为此C++ 集成了操作符new 和delete。

    操作符new的存在是为了要求动态内存。new 后面跟一个数据类型,并跟一对可选的方括号[ ]里面为要求的元素数。它返回一个指向内存块开始位置的指针。其形式为:

    pointer = new type

    或者

    pointer = new type [elements]

    第一个表达式用来给一个单元素的数据类型分配内存。第二个表达式用来给一个数组分配内存。

    既然动态分配的内存只是在程序运行的某一具体阶段才有用,那么一旦它不再被需要时就应该被释放,以便给后面的内存申请使用。操作符delete 因此而产生,它的形式是:

    delete pointer;

    delete [ ] pointer;

    ANSI-C 中的动态内存管理

    在C语言中,为了动态分配内存,我们必须求助于函数库stdlib.h。因为该函数库在C++中仍然有效,并且在一些现存的程序仍然使用,

    函数malloc

    void * malloc (size_t nbytes);

    其中nbytes 是我们想要给指针分配的内存字节数。这个函数返回一个void*类型的指针,因此我们需要用类型转换(type cast)来把它转换成目标指针所需要的数据类型,例如:

    char * ronny;
    ronny = (char *) malloc (10);
     
    int * bobby;
    bobby = (int *) malloc (5 * sizeof(int));

    函数calloc

    calloc 与malloc 在操作上非常相似,他们主要的区别是在原型上:

    void * calloc (size_t nelements, size_t size);

    因为它接收2个参数而不是1个。这两个参数相乘被用来计算所需内存块的总长度。通常第一个参数(nelements)是元素的个数,第二个参数 (size) 被用来表示每个元素的长度。例如,我们可以像下面这样用calloc定义bobby:

    int * bobby;
    bobby = (int *) calloc (5, sizeof(int));

    malloc 和calloc的另一点不同在于calloc 会将所有的元素初始化为0。

    函数realloc

    它被用来改变已经被分配给一个指针的内存的长度。

    void * realloc (void * pointer, size_t size);

    函数 free

    这个函数用来释放被前面malloc, calloc 或realloc所分配的内存块。

    void free (void * pointer);

    注意:这个函数只能被用来释放由函数malloc, calloc 和realloc所分配的空间。

     

     

     

  • 相关阅读:
    BZOJ3435: [Wc2014]紫荆花之恋(替罪羊树,Treap)
    BZOJ2668: [cqoi2012]交换棋子(费用流)
    codeforces111D. Petya and Coloring(组合数学,计数问题)
    codeforces1114D. Flood Fill(区间Dp)
    BZOJ2137: submultiple(生成函数,二项式定理)
    BZOJ3645: Maze(FFT多项式快速幂)
    codeforces 140E.New Year Garland
    BZOJ1194: [HNOI2006]潘多拉的盒子(tarjan)
    BZOJ2337: [HNOI2011]XOR和路径(高斯消元,期望)
    BZOJ3569: DZY Loves Chinese II(线性基构造)
  • 原文地址:https://www.cnblogs.com/aveenzhou/p/2679264.html
Copyright © 2011-2022 走看看