我有一个命令行C程序,我使用calloc()函数为一个结构分配一些内存,结构中还有一个结构,并分配了一些内存。
如果我使用free()函数从父结构释放内存,它还会从子结构中释放内存吗?
或者我应该先从子结构中释放内存吗?
答案 0 :(得分:13)
这是一个简单的规则,对于你所做的每一个内存分配,你必须自己明确释放内存。所以,你需要自己释放孩子的记忆。
答案 1 :(得分:6)
不,你需要先从孩子那里释放记忆。
答案 2 :(得分:1)
始终首先释放子结构。编写将释放每种类型结构的函数以简化生命周期的生活可能是明智之举。如果structTypeA包含structTypeB和StructTypeC,那么这将允许您简单地调用freeStructTypeA(指向sTA-instance的指针)并让函数在释放structTypeA本身之前处理释放所有子结构。
在相关的说明中,您最好尝试通过valgrind运行代码,以确保正确释放所有内存。
答案 3 :(得分:0)
这取决于免费后结构会发生什么。只要在free()
之后没有引用结构,一切都很好。如果调用free并且某些代码引用了释放的内存,则可能会发生非常难以调试的事情。不要做后者。
答案 4 :(得分:0)
可能根本不需要释放内存,因为程序终止时会释放所有已分配的内存。如果你想节省内存使用,你只需要调用free()。
答案 5 :(得分:0)
我认为值得一提的是,对于运行时间较短的命令行工具,它通常无关紧要。程序运行完毕后,操作系统将回收所有内存。但是,如果这是一个运行时间不确定的工具,您需要担心内存管理,其他答案都有很好的建议。