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是否设置为空。因为我要交一份本地的,所以我认为它在这里没有任何用处。
最好这样做:
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不足以正确清除。
有两种常见的使用方法:

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/

10-15 05:14