malloc

简介: 【6月更文挑战第16天】

动态内存分配是程序运行时管理内存的一种方式。malloccallocrealloc是C语言提供的三个用于动态内存分配的标准库函数,它们都定义在stdlib.h头文件中。以下是对这三个函数的详细讲解:

malloc

malloc函数用于在堆上分配一块指定大小的内存区域。它返回一个指向分配内存的指针,如果内存分配失败,将返回NULL

函数原型:

void* malloc(size_t size);
  • size:要分配的内存大小,单位为字节。

使用示例:

#include <stdlib.h>

int main() {
   
    int *array = (int*)malloc(5 * sizeof(int)); // 分配一个整型数组的空间
    if (array == NULL) {
   
        // 处理内存分配失败的情况
    }
    // 使用分配的内存
    free(array); // 释放内存
    return 0;
}

calloc

calloc函数用于分配一块足够大的内存区域以存储一个数组,其每个元素都初始化为0。

函数原型:

void* calloc(size_t num, size_t size);
  • num:要分配的元素数量。
  • size:每个元素的大小,单位为字节。

使用示例:

#include <stdlib.h>

int main() {
   
    int *array = (int*)calloc(5, sizeof(int)); // 分配一个整型数组,初始化为0
    if (array == NULL) {
   
        // 处理内存分配失败的情况
    }
    // 使用分配的内存
    free(array); // 释放内存
    return 0;
}

realloc

realloc函数用于调整之前通过malloccalloc分配的内存块的大小。

函数原型:

void* realloc(void *ptr, size_t new_size);
  • ptr:之前分配的内存块的指针。
  • new_size:新的内存大小,单位为字节。

使用示例:

#include <stdlib.h>

int main() {
   
    int *array = (int*)malloc(5 * sizeof(int));
    // 假设需要扩大数组大小
    array = (int*)realloc(array, 10 * sizeof(int));
    if (array == NULL) {
   
        // 处理内存重新分配失败的情况
    }
    // 使用新分配的内存
    free(array); // 释放内存
    return 0;
}
目录
相关文章
|
1月前
|
编译器 C语言 C++
【C语言】malloc()函数详解(动态内存开辟函数)
【C语言】malloc()函数详解(动态内存开辟函数)
118 2
|
1月前
|
C语言
C语言malloc与free实现原理
malloc()的实现很简单。它首先会扫描之前由 free()所释放的空闲内存块列表,以求找到尺寸大于或等于要求的一块空闲内存。(取决于具体实现,采用的扫描策略会有所不同。例如,first-fit 或 best-fito。)如果这一内存块的尺寸正好与要求相当,就把它直接返回给调用者。如果是一块较大的内存,那么将对其进行分割,在将一块大小相当的内存返回给调用者的同时,把较小的那块空闲内存块保留在空闲列表中。 如果在空闲内存列表中根本找不到足够大的空闲内存块,那么 malloc()会调用 sbrk()以分配更多
20 0
C语言malloc与free实现原理
|
16天前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
21 1
|
3天前
|
缓存 C语言
glibc函数malloc的工作原理
glibc函数malloc的工作原理
10 0
|
29天前
|
存储 安全 编译器
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
17 0
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
|
1月前
|
程序员 编译器 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
27 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
|
1月前
|
编译器 数据库 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(上)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
25 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(上)
|
1月前
|
程序员 编译器 C语言
C语言----动态内存分配(malloc calloc relloc free)超全知识点
C语言----动态内存分配(malloc calloc relloc free)超全知识点
20 6
|
21天前
|
C语言
malloc()函数
`malloc()`是C语言中的动态内存分配函数,用于分配指定大小的内存块,并返回一个`void*`类型的指针。要包含`stdlib.h`头文件来使用它。分配的内存大小以字节为单位,成功则返回内存首地址,失败则返回`NULL`。需要注意的是,返回的指针需强制转换为所需类型,并在使用后用`free()`释放内存,避免内存泄漏。切勿在分配区域内移动指针,以防止释放时出现问题。
|
1月前
|
程序员 编译器 C语言
【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解
【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解