c文件中指针的初始值是多少

时间:2010-03-02 08:57:18

标签: c android embedded

在下面的代码中,是否可能导致一些内存泄漏?

reference-ril.c
static void requestRadioPower(void *data, size_t datalen, RIL_Token t)
{
    ....
    ATResponse *p_response = NULL;
    ....
    err = at_send_command(cmd, &p_response);   // it's a memory leakage or not ?
    ....
    at_response_free(p_response);
    ....
}

在其他功能中:

static void requestOrSendPDPContextList(RIL_Token *t)
{
    ATResponse *p_response;
    ....
    err = at_send_command_multiline ("AT+CGACT?", "+CGACT:", &p_response);  
    // it's a leakage or not ?
    ....
    at_response_free(p_response);
    ....
}

实际上,在某些情况下,在调用at_response_free(p_response)之前会返回这些函数。 我想我们首先将ATResponse * p_response设置为NULL,对吗? 将指针设置为NULL是个好主意吗?

2 个答案:

答案 0 :(得分:3)

取决于:

  • 如果at_send_command_multilineat_send_command查看各自最后一个参数(&p_response)指向的值,则应将它们设置为可预测的值。这可能意味着您将p_response设置为NULL。如果函数为指针分配内存而不查看初始值,那么你没问题。要回答您的特定问题,函数中声明的变量(除非声明为static)没有默认值。
  • 如果at_send_command*函数总是为最后一个参数分配内存,那么必须释放内存。如果他们仅在成功的情况下分配,那么您必须仅在成功的情况下释放。一个简单的规则是,对于每个malloc()calloc(),应该有free()。 (realloc()稍微改变一下,但你现在不需要担心它。)

换句话说,您需要查看at_send_command*函数的文档,或查看函数的定义以完全回答您的问题。

答案 1 :(得分:1)

将指针设置为null当然是个好主意;但两种情况都不是内存泄漏。

C中指针的初始值是垃圾,任何未初始化的变量的初始值也是如此。 (这是因为效率,或者我被告知,需要牢记。)