• C内存管理


    内存管理相关函数

    在C语言中,动态分配内存是指在程序运行时根据需要动态地申请一块内存空间。常用的动态内存分配函数有malloc()、calloc()和realloc()等。

    1. malloc()函数:用于动态分配指定大小的内存空间,并返回一个指向该内存空间的指针。其语法格式为:

    void* malloc(size_t size);

    其中,size表示需要分配的内存大小,以字节为单位。如果分配成功,则返回指向该内存空间的指针;否则返回NULL。

    2. calloc()函数:用于动态分配指定大小的内存空间,并将该空间初始化为零。其语法格式为:

    void* calloc(size_t n, size_t size);

    其中,n表示需要分配的元素个数,size表示每个元素的大小,以字节为单位。如果分配成功,则返回指向该内存空间的指针;否则返回NULL。

    3. realloc()函数:用于重新分配之前由malloc()、calloc()或realloc()等函数分配的内存空间。其语法格式为:

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

    其中,ptr表示指向之前分配的内存空间的指针,size表示新分配的内存大小,以字节为单位。如果分配成功,则返回指向该内存空间的指针;否则返回NULL。

    需要注意的是,在使用完动态分配的内存后,应该使用free()函数将内存释放,以便其他程序可以使用。

    动态分配内存举例

    在C语言中,可以使用`malloc()`函数动态分配内存。下面是一个简单的例子:

    #include

    #include

    int main() {

    int n;

    printf("请输入一个整数: ");

    scanf("%d", &n);

    // 动态分配内存

    int *arr = (int *)malloc(n * sizeof(int));

    if (arr == NULL)

    {

    printf("内存分配失败!");

    return 1;

    }

    printf("请输入%d个整数: ", n);

    for (int i = 0; i < n; i++)

    {

    scanf("%d", &arr[i]);

    }

    printf("你输入的整数为: ");

    for (int i = 0; i < n; i++)

    {

    printf("%d ", arr[i]);

    }

    // 释放内存

    free(arr);

    return 0;

    }

    在这个例子中,我们首先从用户那里获取一个整数n,然后使用malloc()函数动态分配一个大小为n的整数数组。接着,我们从用户那里获取n个整数并存储在数组中。最后,我们输出这些整数并释放内存。

    重新调整内存的大小和释放内存

    在C语言中,可以使用realloc()函数来重新调整内存的大小。realloc()函数接受两个参数:一个指向已分配内存的指针和新的内存大小。如果内存分配成功,realloc()函数会返回一个新的指针,指向新分配的内存;如果内存分配失败,realloc()函数会返回NULL。

    以下是一个简单的示例:

    #include

    #include

    int main()

    {

    int n = 5;

    int *arr = (int *)malloc(n * sizeof(int)); // 分配内存

    if (arr == NULL) {

    printf("内存分配失败!");

    return 1;

    }

    // 使用内存

    for (int i = 0; i < n; i++)

    {

    arr[i] = i + 1;

    }

    // 输出原始数组

    printf("原始数组:");

    for (int i = 0; i < n; i++)

    {

    printf("%d ", arr[i]);

    }

    // 重新调整内存大小

    int new_n = 10;

    int *new_arr = (int *)realloc(arr, new_n * sizeof(int));

    if (new_arr == NULL)

    {

    printf("内存重新分配失败!");

    free(arr); // 释放原始内存

    return 1;

    }

    // 使用新的内存空间

    for (int i = n; i < new_n; i++)

    {

    new_arr[i] = i + 1;

    }

    // 输出调整后的数组

    printf("调整后的数组:");

    for (int i = 0; i < new_n; i++)

    {

    printf("%d ", new_arr[i]);

    }

    // 释放内存

    free(new_arr); // 释放原始内存

    free(arr); // 释放调整后的内存

    return 0;

    }

    在这个示例中,我们首先使用malloc()函数为一个整数数组分配内存。然后,我们使用realloc()函数将数组的大小调整为10。最后,我们释放了原始内存和调整后的内存。

  • 相关阅读:
    vue2(5)
    大数据技术之Hadoop:MapReduce与Yarn概述(六)
    1024共码未来(一览中华风华,API First)
    腾讯音乐Q3前瞻:寻找更多确定性,做好供需侧的求实创新是关键
    javascrip非标准 json格式转换为标准格式
    Windows安装Sentinel
    2023-06-15:说一说Redis的Key和Value的数据结构组织?
    CTFSHOW菜狗杯 web
    mybatisPlus不能赋null值
    批量提取图片文件名使用Python中os.listdir( )函数时出现文件名乱序,非预想排序的解决方法
  • 原文地址:https://blog.csdn.net/qq_20490175/article/details/134302284