2

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

如果我使用 free() 函数从父结构中释放内存,它是否也会从子结构中释放内存?

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

4

6 回答 6

13

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

于 2010-01-19T17:07:03.587 回答
6

不,你需要先释放孩子的记忆。

于 2010-01-19T17:05:05.750 回答
1

始终首先释放子结构。编写将释放每种类型的结构以进一步简化生活的函数可能是明智的。如果 structTypeA 包含 structTypeB 和 StructTypeC,这将允许您简单地调用 freeStructTypeA(pointer-to-sTA-instance) 并让函数在释放 structTypeA 本身之前释放所有子结构。

在相关说明中,您最好尝试通过 valgrind 运行代码,以确保正确释放所有内存。

于 2010-01-19T22:30:52.393 回答
0

这取决于释放后结构会发生什么。只要结构不被引用free()毕竟是好的。如果 free 被调用,然后一些代码引用了释放的内存,则可能会发生非常难以调试的事情。不要做后者。

于 2010-01-19T17:08:14.787 回答
0

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

于 2010-01-19T17:10:14.733 回答
0

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

于 2010-01-19T17:11:16.920 回答