所以我想知道函数中使用的内存会发生什么。我正在编写一个多线程程序,我想知道如果我只是在函数及其内存返回后调用它会发生什么。
答案 0 :(得分:4)
"自动"存储 - 直接声明而不是从堆显式分配的变量 - 从堆栈中获取,并且在函数退出时基本消失。
任何你明确表示malloc()必须的东西最终都是明确的free()d,只有一次。您有责任构建代码以便正确发生。如果您在函数退出后不打算使用它,则应在函数退出之前释放它。如果它是较大数据结构的一部分,或者被返回给调用者,则需要设计程序以了解这一点,并在不再需要该内存块时自行清理。
如果你分配,你必须自由 - 或者必须清楚地记录他们的责任是在他们完成记忆时释放记忆。
(请注意,这与Java和其他"垃圾收集"语言非常不同,当没有人主动使用它时,内存会自动恢复。)