【发布时间】:2014-07-24 09:37:07
【问题描述】:
我正在用 C 语言开发一个项目,我需要释放分配的内存并在它退出之前关闭所有打开的文件。
我决定实现一个 clean 函数来完成所有这些工作并使用 atexit 调用它,因为有很多可能的退出场景。
问题是atexit不允许我设置带参数的函数,所以我无法将进程结束时需要释放的指针发送给clean。
所以我需要将每个可能需要释放的指针以及可能在程序中保持打开的每个文件都声明为全局变量? (我已经这样做了,但看起来不太好)或者确实存在与atexit 类似的允许发送参数的函数?或者更可能还有另一种我想念的方式?
【问题讨论】:
-
您只需要一个指向您的内存池的变量。这似乎可以接受。
-
如果您使用的是现代消费者操作系统,那么所有资源将在您退出时释放。这意味着所有分配的内存将被释放,所有打开的文件将被关闭,等等。
-
另外,如果你有例如需要在整个过程运行时打开的文件,那么您可能还会在多个地方访问它,这意味着它已经是一个全局变量,或者至少在一个翻译单元中是全局的,然后您可以拥有一个关闭的功能从全局
clean_all函数调用的那个文件。您分配的内存也是如此。 -
另一方面,如果您只是打开文件然后不关闭它们或分配内存但从未释放它,即使您完成了文件或内存,您也会有资源泄漏,迟早会回来咬你。
-
@this 那样可能没问题,但我正在尝试以最好的方式做,因为这是大学的项目。