【发布时间】:2015-05-04 07:14:33
【问题描述】:
在某些函数中,我需要使用 malloc() 分配内存并有几个 if..else 语句,如伪代码所示:
allocate memory
if condition_1
do_stuff
if condition_2
do_more_stuff
else
error
else
error
free allocated memory
return
所以我在开始时分配内存,如果一切正常,它就会被释放。但目前错误函数只打印错误消息并退出程序。但是正如我经常读到的那样,尽管当程序退出并且操作系统处理通常会处理之后的释放时,它不会释放内存,但它不是很好的风格。我怎样才能以懒惰的方式释放钱?我是否必须编写一个错误函数,将每个指针指向我分配的必须释放的内存,指针可能是不同的数据类型?或者我应该在调用错误函数之前放 free(ptr) 吗?一个错误函数,它接受一个数据类型为 void 的指针数组,并且比所有的都释放,会这样做吗?
【问题讨论】:
-
如果你在错误处理之前调用
free(ptr),你肯定会释放ptr。只是一种简单直接的方法。 -
这里没有偷懒的方式。最懒惰的方法是编写函数
error来处理错误并释放内存。 -
您也可以编写自己的分配包装器来跟踪所有分配的指针,然后循环它们并释放它们,但它当然会有一些开销..
-
从多个错误点释放资源的常用方法是goto cleanup
-
@black:目前最好的答案。这正是它在 Linux 内核中的完成方式,尽管使用
goto经常被批评为不好的做法,但我想说对于 C 中的错误处理,这是一个最佳做法。使代码更加紧凑和可读。
标签: c memory error-handling malloc