如何释放指向字符串指针的指针?

时间:2019-07-27 12:01:45

标签: c pointers malloc free

我想知道如何释放包含指针的结构。

struct tree {
    struct tree *p;
    char name[NAME];
    char *relation_name[RELATION];
    struct tree *left;
    struct tree *right;
};

如果我释放结构,我想知道*relation_name[RELATION]会发生什么。 *relation_name[RELATION]指向分配给malloc()的某些刺。 我应该释放所有的*relation_name[RELATION]然后释放结构吗? 还是如果我释放结构,一切都会从内存中删除?

1 个答案:

答案 0 :(得分:1)

规则是:每个malloc()(或calloc()realloc())必须具有一个对应的free()

因此,在您的情况下,您必须在整个结构之前free()使用字符串。

假设您做这样的事情

struct tree{
    struct tree* p;
    char name[NAME];
    char *relation_name[RELATION];
    struct tree* left;
    struct tree* right;
};

struct tree *x = malloc(42 * sizeof *x);
//               ^^^^^^^^^^^^^^^^^^^^^^
for (int k = 0; k < 42; k++) {
    for (int i = 0; i < 10; i++) x[k].relation_name[i] = malloc(100);
//                                                       ^^^^^^^^^^^
}

是时候释放资源了,您需要撤消该过程

for (int k = 0; k < 42; k++) {
    for (int i = 0; i < 10; i++) free(x[k].relation_name[i]);
//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
free(x);