C语言动态内存分配之calloc

 calloc函数用于动态分配内存空间。它的全称是"contiguous allocation",表示连续分配

calloc函数基本使用

函数原型

void*calloc(size_t num,size_t size);

参数说明

num:要分配的元素数量

size:每个元素大小

calloc函数会返回一个指向分配的内存空间的指针,如果分配失败,则返回NULL。与malloc函数不同的是,calloc函数会将分配的内存全部初始化为0.

示例代码


#include 
#include 

int main() {
    // 分配 10 个整数大小的内存空间
    int *arr = calloc(10, sizeof(int));

    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    // 输出分配的内存地址
    printf("内存地址: %p\n", arr);

    // 释放分配的内存
    free(arr);

    return 0;
}

注意问题

内存分配失败

calloc函数可能会返回NULL,表示动态内存分配失败。在使用返回的指针之前,应该先检查指针是否为NULL,以确保分配成功;

内存释放

和malloc函数一样,使用calloc函数分配的内存空间需要使用free函数进行释放,以避免内存泄漏

元素大小

calloc函数中的第二个参数决定了每个元素的大小。确保传递正确的大小,以满足实际需求。

边界检查

尽管calloc函数会分配指定数量的元素,但仍然需要在使用内存时进行边界检查,以避免越界访问

多次分配

如果需要分配多个连续的内存块,可以考虑使用realloc函数进行扩展或缩小已分配的内存块,而不是多次调用calloc。

calloc函数和malloc函数的区别和选用

区别

1.内存初始化,calloc函数分配内存的同时将其全部初始化为0;malloc函数只管分配内存空间;

2.参数数量不同,calloc函数需要传递两个参数,分别是元素数量和单个元素大小;malloc函数只需要传递一个参数,即要分配的内存字节数。

选用

需要初始化选calloc,不需要选malloc,但是两个都要用free函数来释放空间

参考代码,用calloc函数存储一个字符串


#include 
#include 

int main() {
    int n;
    printf("请输入字符串的长度:");
    scanf("%d", &n);

    // 动态分配内存
    char *str = calloc(n, sizeof(char));

    printf("请输入字符串:");
    scanf("%s", str);

    // 输出字符串
    printf("输入的字符串为:%s\n", str);

    // 释放动态分配的内存
    free(str);

    return 0;
}

你可能感兴趣的:(#,C基础,c语言,开发语言)