什么是从错误返回后释放内存的最好方法? [英] What is the best way to free memory after returning from an error?
本文介绍了什么是从错误返回后释放内存的最好方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有一个呼叫者分配内存的函数:
Suppose I have a function that allocates memory for the caller:
int func(void **mem1, void **mem2) {
*mem1 = malloc(SIZE);
if (!*mem1) return 1;
*mem2 = malloc(SIZE);
if (!*mem2) {
/* ... */
return 1;
}
return 0;
}
我想听听你的最佳方式反馈给free()的情况下,分配的内存第二的malloc()失败。你可以想象有更多的错误的退出点多分配的内存更详尽的情况。
I'd like to hear your feedback on the best way to free() the allocated memory in case the second malloc() fails. You can imagine a more elaborate situation with more error exit points and more allocated memory.
推荐答案
我知道人们都厌恶使用它们,但这是一个转到
C中的完美的境地
I know people are loathe to use them, but this is the perfect situation for a goto
in C.
int func( void** mem1, void** mem2 )
{
int retval = 0;
*mem1 = malloc(SIZE);
if (!*mem1) {
retval = 1;
goto err;
}
*mem2 = malloc(SIZE);
if (!*mem2) {
retval = 1;
goto err;
}
// ...
goto out;
// ...
err:
if( *mem1 ) free( *mem1 );
if( *mem2 ) free( *mem2 );
out:
return retval;
}
这篇关于什么是从错误返回后释放内存的最好方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文