我有一个 struct a
的 vector ,编译时不知道大小。
每个struct a
都包含一个指向struct b
的 vector 的指针。 struct b
的 vector 长度在编译时未知。
如果我这样做:
#include <stdio.h>
#include <stdlib.h>
struct b {
int n;
};
struct a {
int n;
struct b *v;
};
int main() {
struct a *s;
struct a *ta;
struct b *tb;
s = (struct a*)malloc(sizeof(struct a) * 32);
s->v = (struct b*)malloc(sizeof(struct b) * 32);
s->n = 1234;
((s->v)+1)->n = 5678;
fprintf(stderr, "%p: %i / %p: %i\n", s, s->n, (s->v)+1, ((s->v)+1)->n);
ta = s;
tb = (s->v)+1;
free(s);
fprintf(stderr, "%p: %i / %p: %i\n", ta, ta->n, tb, tb->n);
return 0;
}
例如输出:
0x1cb3010: 1234 / 0x1cb3224: 5678
0x1cb3010: -1526330504 / 0x1cb3224: 5678
当在同一个指针中分配内存块时,struct b vector 是否会自动释放?或者我是否必须首先为 struct a
vector 中的每个项目释放单独的 struct b
vector ?
The question on this link已被建议作为这篇文章的副本,但这里的问题询问的是 free
调用中的现有功能,而不是询问有关如何进行递归过程的建议。
最佳答案
简短回答:不,您必须为每个 malloc
提供一个 free
。
更好的答案:还是不行,但是你可以写一个函数来释放多个结构成员。这是一个例子:
void freeStruct(struct a *foo)
{
free(foo->v);
free(foo);
}
关于c - malloc 是否递归工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961206/