const char **ptr 与 char *ptr[] 的释放问题的探究

来源:互联网 发布:知乎电脑版下载官网 编辑:程序博客网 时间:2024/06/06 01:33

直接上代码

#include <iostream>#include <string>#include <string.h>#include <stdlib.h>#include <stdio.h>using namespace std;int main(){    char *data[] = {NULL};    const char **ptr = (const char**)malloc(sizeof(const char *) * 2);    data[0] = (char *)malloc(sizeof(char)*5);    data[1] = (char *)malloc(sizeof(char)*5);    printf("--11-------%x\n", data[0]);    printf("--11-------%x\n", data[1]);    bzero(data[0], 5);    bzero(data[1], 5);    printf("--22-------%x\n", data[0]);    printf("--22-------%x\n", data[1]);    char cc1[] = "jian";    char cc2[] = "lian";    strcpy(data[0], cc1);    strcpy(data[1], cc2);    //data[0] = cc1;    //data[1] = cc2;    printf("--33-------%x\n", data[0]);    printf("--33-------%x\n", data[1]);    string str1 = data[0];    string str2 = data[1];    ptr[0] = str1.c_str();    ptr[1] = str2.c_str();    free(ptr);    ptr = NULL;    printf("--44-------%x\n", data[0]);    printf("--44-------%x\n", data[1]);    free(data[0]);    data[0] = NULL;    free(data[1]);    data[1] = NULL;    return 0;}

运行结果如下
这里写图片描述
若将代码中的strcpy改为指针赋值,则会报错。

总结:
(1)malloc与free配对使用,避免发生内存泄漏。但是如果free的不是malloc出来的空间,则会报错。
(2)const char **ptr, 由于对ptr[0]没有malloc,故不需free(ptr[0]),直接free(ptr)即可。
(3)char *ptr[],其数组成员进行了malloc操作,故要对数组里的成员进行free。

0 0
原创粉丝点击