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所分配的空间。

     

     

     

  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/aveenzhou/p/2679264.html
Copyright © 2011-2022 走看看