c语言二级指针练习

char **generate_memory(int num)
{
    // 循环控制变量
    int i = 0;

    // 声明二维指针
    char **p = NULL;

    // 在堆内存中 , 分配一块内存空间
    // 用于存储 num 个 一维指针
    // 每个 一维指针 指向一块内存空间
    p = (char **)malloc( sizeof(char*) * num );

    if(p == NULL)
    {
        return NULL;
    }

    // 遍历 二维指针 指向的多个 一维指针
    // 并为每个 一维指针 在堆内存中 分配 20 字节内存
    for(i = 0; i < num; i++)
    {
        // 为每个字符分配 20 字节空间
        p[i] = (char *)malloc(sizeof (char) * 20);
        // 向内存中写入 字符串 , 字符串内容是 i + 1
        // 注意是通过通配符拼装的字符串
        sprintf(p[i], "%d", i + 1);
    }
    return p;
}

void free_mem(char **p, int num){
    // 循环控制变量
    int i = 0;

    // 判定指针合法性
    if(p == NULL)
    {
        return;
    }

    // 释放内存
    // 先释放 num 个 一级指针
    for(i = 0; i < num; i++)
    {
        if(p[i] != NULL)
        {
            free(p[i]);
            p[i] = NULL;
        }
    }

    // 再释放 二级指针
    if(p != NULL)
    {
        free(p);
    }
}
posted @ 2022-07-08 14:39  萧海~  阅读(34)  评论(0编辑  收藏  举报