代码之家  ›  专栏  ›  技术社区  ›  Cheetah

使用后释放内存

  •  2
  • Cheetah  · 技术社区  · 15 年前

    我有一个命令行c程序,我使用calloc()函数为一个结构分配一些内存,这个结构中也有一个结构,并且分配了一些内存。

    如果我使用free()函数从父结构释放内存,它还会从子结构释放内存吗?

    还是应该先从子结构释放内存?

    6 回复  |  直到 15 年前
        1
  •  13
  •   Naveen    15 年前

    这是一个简单的规则,对于你做的每一个内存分配,你必须自己显式地释放内存。所以,你需要自己释放孩子的记忆。

        2
  •  6
  •   Trent    15 年前

    不,你得先把孩子的记忆释放出来。

        3
  •  1
  •   Sean    15 年前

    总是先释放子结构。编写将释放每种类型结构的函数以简化更高层次的生活,这可能是明智的。如果StructTypeA包含StructTypeB和StructTypeC,这将允许您简单地调用FreeStructTypeA(指向STA实例的指针),并让函数在释放StructTypeA本身之前释放所有子结构。

    另一个相关的注意事项是,您最好尝试在valgrind中运行代码,以确保正确释放所有内存。

        4
  •  0
  •   wallyk    15 年前

    这取决于自由之后结构发生了什么。只要结构在之后没有被引用 free() 一切都很好。如果调用free,然后一些代码引用已释放的内存,则很难调试。不要做后者。

        5
  •  0
  •   Mick    15 年前

    可能根本不需要释放内存,因为当程序终止时,所有分配的内存都会被释放。如果希望节省内存使用,只需要调用free()。

        6
  •  0
  •   Sean Devlin    15 年前

    我认为值得一提的是,对于短期运行的命令行工具来说,这通常并不重要。程序运行完成后,操作系统将回收所有内存。但是,如果这是一个运行时间不确定的工具,您确实需要担心内存管理,其他的答案有很好的建议。