c - malloc 是否递归工作?

标签 c malloc

我有一个 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);
}

还有:Don't cast the return value of malloc .

关于c - malloc 是否递归工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961206/

相关文章:

c - AES mixColumns 错误

c - 我应该在我的 C 代码中检测 OOM(内存不足)错误吗?

c - C中用于内存分配/指针的星号定位

抛弃指向 const 的指针数组中的常量性,以及有关 C 的其他问题

ios - 读取音频文件时出现大量内存峰值

c - 在 for 循环中管理内存

C 中的自定义分配器

c - 释放字符时出错 ***

c - 错误 : expected expression before '/' token

c - 堆内存可视化