C语言malloc,calloc,realloc函数——MZH

malloc 函数

  • 作用malloc 函数用于分配指定字节数的内存空间,并返回一个指向这块内存空间的指针。分配的内存空间是未初始化的,即其中的内容是未定义的。

  • 原型void* malloc(size_t size);

  • 参数size 参数指定了要分配的字节数。

  • 返回值:如果分配成功,返回一个指向分配的内存空间的指针;如果分配失败,返回 NULL

  • 具体应用实例(来源于ai,已经进行过测试)

  • #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int n = 5; // 要分配的整数数量
        int *array = (int *)malloc(n * sizeof(int)); // 分配内存
    
        // 检查内存是否成功分配
        if (array == NULL) {
            fprintf(stderr, "Memory allocation failed\n");
            return 1; // 分配失败,退出程序
        }
    
        // 初始化数组并打印其内容
        for (int i = 0; i < n; i++) {
            array[i] = i * 2;
        }
        printf("Array contents:\n");
        for (int i = 0; i < n; i++) {
            printf("%d ", array[i]);
        }
        printf("\n");
    
        // 使用完数组后,释放内存
        free(array);
        array = NULL; // 防止悬挂指针
    
        return 0;
    }

calloc 函数

  • 作用calloc 函数也用于分配内存空间,但它允许你指定要分配的元素的数量和每个元素的大小(以字节为单位),并且分配的内存空间会被初始化为零。

  • 原型void* calloc(size_t num, size_t size);

  • 参数num 参数指定了要分配的元素的数量,size 参数指定了每个元素的大小(以字节为单位)。

  • 返回值:如果分配成功,返回一个指向分配的内存空间的指针,该空间已被初始化为零;如果分配失败,返回 NULL

  • 具体应用实例(来源于ai,已经进行过测试)

  • #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int n = 10; // 要分配的整数数量
        int *array = (int *)calloc(n, sizeof(int)); // 分配内存并初始化为0
    
        // 检查内存是否成功分配
        if (array == NULL) {
            fprintf(stderr, "Memory allocation failed\n");
            return 1; // 分配失败,退出程序
        }
    
        // 打印数组内容(初始值应为0)
        printf("Array contents:\n");
        for (int i = 0; i < n; i++) {
            printf("%d ", array[i]);
        }
        printf("\n");
    
        // 使用完数组后,释放内存
        free(array);
        array = NULL; // 防止悬挂指针
    
        return 0;
    }

realloc 函数

  • 作用realloc 函数用于调整之前通过 malloc 或 calloc 分配的内存空间的大小。它可以增加或减少已分配内存空间的大小。

  • 原型void* realloc(void* ptr, size_t size);

  • 参数ptr 参数是指向之前分配的内存空间的指针,size 参数指定了新的内存空间的大小(以字节为单位)。

  • 返回值:如果重新分配成功,返回一个指向新的内存空间的指针(可能与原来的地址不同);如果重新分配失败,返回 NULL,并且原来的内存空间保持不变。

  • 具体应用实例(来源于ai,已经进行过测试)

  • #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int *array = (int *)malloc(5 * sizeof(int)); // 初始分配5个整数的内存
    
        // 检查内存是否成功分配
        if (array == NULL) {
            fprintf(stderr, "Memory allocation failed\n");
            return 1; // 分配失败,退出程序
        }
    
        // 初始化数组
        for (int i = 0; i < 5; i++) {
            array[i] = i * 10;
        }
    
        // 重新分配内存以存储10个整数
        int *new_array = (int *)realloc(array, 10 * sizeof(int));
    
        // 检查内存是否成功重新分配
        if (new_array == NULL) {
            fprintf(stderr, "Memory reallocation failed\n");
            free(array); // 释放原始内存
            return 1; // 重新分配失败,退出程序
        }
    
        array = new_array; // 更新指针
    
        // 初始化新分配的内存部分
        for (int i = 5; i < 10; i++) {
            array[i] = i * 10;
        }
    
        // 打印数组内容
        printf("Array contents:\n");
        for (int i = 0; i < 10; i++) {
            printf("%d ", array[i]);
        }
        printf("\n");
    
        // 使用完数组后,释放内存
        free(array);
        array = NULL; // 防止悬挂指针
    
        return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值