c - 将指针作为局部变量传递给函数

标签 c pointers

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/

相关文章:

c++ - 从 swig 返回 double * 作为 python 列表

c++ - ‘->’ 的基操作数具有非指针类型

c - 从使用调试选项编译的 C 代码获取源代码

c++ - 在 C++ 中没有类的情况下从 main() 访问函数内部的静态变量

c - 在 .bmp 中隐藏文本

C 通过 udp 套接字发送结构

c - [ansi c] 将 bitifield 作为引用

c - 重新分配后打印字符串数组时遇到问题?

将 Linux C 字符数组转换为 Int

iphone - 全局添加一个函数以在整个 iPhone 应用程序中使用