我有一个命令行 C 程序,我使用 calloc() 函数为一个结构分配一些内存,该结构中也有一个分配了一些内存的结构。
如果我使用 free() 函数从父结构中释放内存,它是否也会从子结构中释放内存?
还是我应该先从子结构中释放内存?
我有一个命令行 C 程序,我使用 calloc() 函数为一个结构分配一些内存,该结构中也有一个分配了一些内存的结构。
如果我使用 free() 函数从父结构中释放内存,它是否也会从子结构中释放内存?
还是我应该先从子结构中释放内存?
这是一个简单的规则,对于你所做的每一次内存分配,你必须自己显式地释放内存。所以,你需要自己释放子记忆。
不,你需要先释放孩子的记忆。
始终首先释放子结构。编写将释放每种类型的结构以进一步简化生活的函数可能是明智的。如果 structTypeA 包含 structTypeB 和 StructTypeC,这将允许您简单地调用 freeStructTypeA(pointer-to-sTA-instance) 并让函数在释放 structTypeA 本身之前释放所有子结构。
在相关说明中,您最好尝试通过 valgrind 运行代码,以确保正确释放所有内存。
这取决于释放后结构会发生什么。只要结构不被引用free()
毕竟是好的。如果 free 被调用,然后一些代码引用了释放的内存,则可能会发生非常难以调试的事情。不要做后者。
可能根本不需要释放内存,因为所有分配的内存都会在程序终止时释放。如果你想节省内存使用,你只需要调用 free() 。
我认为值得一提的是,对于短期运行的命令行工具,它通常并不重要。一旦你的程序运行完毕,操作系统无论如何都会回收所有的内存。但是,如果这是一个运行时间不确定的工具,您确实需要担心内存管理,其他答案有很好的建议。