Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我不熟悉使用 Crouton。我正在尝试将它用于 linux 环境中的一些 C 编程实践。每当我运行一个使用 malloc() 的程序时,我都会收到 x 个字节的内存泄漏错误。当我明确释放分配的内存时,内存泄漏错误消失了。这是Crouton问题还是整体上的Ubuntu问题?
有什么办法可以修复它,这样我就不必每次都显式释放分配的空间?我知道 free()ing 是很好的编码实践等等,但我只是想知道是否有办法让分配的内存在退出后自动释放。
C是一种手动内存管理语言,这意味着你需要释放你手动分配的内存,而不是垃圾收集。您可以使用诸如atexit()在程序退出时促进内存释放过程之类的功能,但我个人不建议将其作为良好的编程习惯。如果您使用C编程语言进行编程,您应该学习使用free().
C
atexit()
free()
在 Linux(和大多数现代多任务操作系统)上,当进程退出(或终止,例如通过信号)时,其所有资源都由操作系统内核释放,包括其虚拟地址空间。
所以肯定有可能free 在退出之前忘记堆内存,许多(但不是全部)程序都在这样做。
free
如果您正在开发一个应用程序,您可能仍希望free在退出时正确处理每个动态分配的内存区域。这有助于使用内存泄漏检测工具,如valgrind(但需要一些开发工作,甚至需要一些运行时间)。