C语言中的内存管理是程序员需要关注的重要方面。在C中,内存的分配和释放主要通过标准库中的函数来完成,例如 malloc、calloc、realloc 和 free。

以下是这些函数的简要说明:

1. malloc 函数
#include <stdlib.h>

void *malloc(size_t size);

malloc 函数用于分配指定大小的内存块,并返回一个指向该内存块的指针。如果分配成功,返回的指针是未初始化的;如果分配失败,返回 NULL。
int *arr = (int *)malloc(5 * sizeof(int));
if (arr != NULL) {
    // 分配成功,使用 arr
    // ...
    free(arr); // 释放内存
} else {
    // 分配失败
    // 处理错误
}

2. calloc 函数
#include <stdlib.h>

void *calloc(size_t num_elements, size_t element_size);

calloc 用于分配指定数量和大小的连续内存块,返回一个指向该内存块的指针。与 malloc 不同,calloc 分配的内存块被初始化为零。
int *arr = (int *)calloc(5, sizeof(int));
if (arr != NULL) {
    // 分配成功,使用 arr
    // ...
    free(arr); // 释放内存
} else {
    // 分配失败
    // 处理错误
}

3. realloc 函数
#include <stdlib.h>

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

realloc 函数用于修改之前分配的内存块的大小。它接受一个指向之前分配的内存块的指针和新的大小,并返回一个指向重新分配后的内存块的指针。如果重新分配失败,返回 NULL。
int *arr = (int *)malloc(5 * sizeof(int));
if (arr != NULL) {
    // 分配成功,使用 arr
    // ...
    
    int *new_arr = (int *)realloc(arr, 10 * sizeof(int));
    if (new_arr != NULL) {
        // 重新分配成功,使用 new_arr
        // ...
        free(new_arr); // 释放内存
    } else {
        // 重新分配失败
        // 处理错误
        free(arr); // 释放原始内存
    }
} else {
    // 分配失败
    // 处理错误
}

4. free 函数
#include <stdlib.h>

void free(void *ptr);

free 函数用于释放之前通过 malloc、calloc 或 realloc 分配的内存块。使用 free 后,指针 ptr 不再指向有效的内存。
int *arr = (int *)malloc(5 * sizeof(int));
if (arr != NULL) {
    // 分配成功,使用 arr
    // ...
    free(arr); // 释放内存
} else {
    // 分配失败
    // 处理错误
}

注意:在使用动态分配的内存时,及时释放内存是很重要的,以避免内存泄漏。在释放内存后,确保将指针设置为 NULL,以防止悬挂指针问题。


转载请注明出处:http://www.zyzy.cn/article/detail/13539/C 语言