我想知道如何释放包含指针的结构。
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]
然后释放结构吗?或者如果我释放结构,所有内容都会从我的内存中删除?
规则是:每个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);