gcc 4.7.2 c89
你好,
我有以下功能:
void module_param_destroy(module_param_t *param)
{
param = NULL;
/* Stop the compiler from complaining */
APR_UNUSED(param);
}
我是这样调用它的:
module_param_destroy(module->call_param);
参数 param
是否设置为 NULL。由于我传递的是本地副本,因此我认为它在这里没有任何用处。
这样做会更好吗:
void module_param_destroy(module_t *md)
{
md->param = NULL;
/* Stop the compiler from complaining */
APR_UNUSED(md->param);
}
然后这样调用它:
module_param_destroy(md);
这些结构从 malloc 全局分配了内存。
非常感谢您的任何建议,
最佳答案
如果 param 指向从 malloc
获得的内存,则将其设置为 NULL
不足以正确清理。
module_param_destroy
有两种常见的使用方式:
void module_param_destroy(module_param_t *param)
{
free(param);
}
或
void module_param_destroy(module_param_t **param)
{
free(*param);
*param = NULL;
}
主要区别在于,对于第二个变体,param 被设置为可测试的值以指示它已被清理。对于第一个变体,您必须记住传递给 module_param_destroy
的指针在函数返回后不可用。
你分别称他们为
module_param_destroy(module->call_param);
和
module_param_destroy(&module->call_param);
关于c - 将指针作为局部变量传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285138/