美文网首页
malloc(), calloc()和realloc()

malloc(), calloc()和realloc()

作者: 吃柠檬的鸮 | 来源:发表于2019-03-11 23:59 被阅读0次

    C 标准库提供下面四个函数进行内存管理:

    malloc(), calloc() 用来分配新的内存区域

    realloc() 调整以前分配的内存区域

    free() 释放以前分配的内存

    这四个函数都是声明在 stdlib.h 头文件里。

    void* malloc(size_t size);

    malloc() 分配连续的内存区域,体积不小于 size 字节,内存区域不被初始化,其值是未确定的。

    void* calloc(size_t count, size_t size);

    calloc() 分配不少于 count * size 的内存区域。相当于申请了一个数组,该数组包含 count 个元素,每个元素占用 size 个字节,分配的内存均被初始化为 0。

    malloc() 和 calloc() 都返回 void* 指针,如果分配成功,则返回指向新分配内存的首地址,编译器一般会隐式地进行适当的类型转换,可以根据需要进行显式类型转换。如果分配失败,返回空指针 NULL。

    分配的内存区域会一直被程序所保留,除非显式调用 free() 或 realloc() 进行示范。

    void free(void *ptr);

    free() 释放动态分配的内存。如果调用此函数时传入空指针,则该函数不起作用。

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

    realloc() 释放 ptr 所指向的内存区域,并分配大小为 size 字节的内存区域,并返回该内存的首地址。realloc() 会保留原始内存内容,如果新的内存地址没有从原始区域的地址开始,则将原始区域的内存复制到新的内存区域,如果原始内存较新分配的内存大,则多出来的内容没有意义。

    相关文章

      网友评论

          本文标题:malloc(), calloc()和realloc()

          本文链接:https://www.haomeiwen.com/subject/zzdwpqtx.html