我想知道如何释放包含指针的结构。
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]
然后释放结构吗?
还是如果我释放结构,一切都会从内存中删除?
答案 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);