malloc和calloc内存申请与释放、内存池的用法

1、内存申请与释放

1、用calloc申请的内存如果作为返回值的话,可以在外面释放。
例如:

char *uci_getvalue()
{
    char *value = calloc(1, strlen(ptr.o->v.string)+1);
    if (!value)
        goto error;
    strcpy(value, ptr.o->v.string);
    return value;
}

int web_wifi_mode_set()
{
    char *uv_mesh_enable = NULL;
    uv_mesh_enable = uci_getvalue(WIFI_MODE_MESH_CFG);
    if(uv_mesh_enable ) free (uv_mesh_enable );
    return ret;
}

这些因为需要申请内存的时候不知道大小,所以只能申请成指针形式的,在uci_getvalue中申请的内存,在函数内部没有释放,所以在web_wifi_mode_set调用的时候去释放。申请过的内存一定要释放。

用calloc在函数内部申请的指针return到函数外,然后在另外一个函数外释放,这种操作是可行的

2、内存的申请malloc和calloc
与malloc唯一的区别是在于calloc在返回地址之前将申请的空间全部初始化为0

3、申请过的内存一定要释放,要不然产生碎片,最终导致系统不能正常运行

2、内存池

内存池不容易产生碎片

你可能感兴趣的:(c++,数据结构,开发语言)